Подтвердить что ты не робот

JQuery версии 1.5 - ajax - <script> tag timestamp problem

Если я загружаю некоторый контент с помощью ajax (jQuery), который имеет в нем тег script, jQuery 1.5 добавляет метку времени в тег script src url. См. Пример ниже.

Пример: содержимое, которое я загружаю с помощью ajax:

<div>text1</div>
<script type="text/javascript" src="/js/abc-xyz.js?r=1.1"></script>

Это URL-адрес src, откуда он загружает код script после того, как я вставляю предыдущий контент на страницу:

.../js/abc-xyz.js?r=1.1&_=1297892228466

Кто-нибудь знает, почему это происходит? Это происходит только с jQuery 1.5. Это не происходит с jQuery 1.4.4.

Пример кода:

$.ajax({
    url: content.html,
    type: 'GET',
    data: someDataObject,
    success: function(data) {
        // some code here

    },
    error: function(data) {
        // some code here
    }
});

Спасибо.

4b9b3361

Ответ 1

См. ниже ответ, что я получил от команды jQuery. Билет № 8298: http://bugs.jquery.com/ticket/8298

Ответ:

После проверки вашего отчета и образцов кода я прихожу к выводу, что это не ошибка. Я также сделал этот тестовый сценарий jQuery 1.4+ (до 1,5) имел ошибку, из-за которой параметр кеша не был по умолчанию для false для script Запросы. Эта ошибка (см. # 7578) исправлена ​​в 1.5. Теперь то, что вы знаете или не знаете, это то, что jQuery выполняет специальные дескрипторы script при выполнении манипуляций с DOM (для предотвращения определенных ошибок в IE). Он отфильтровывает их и запрашивает их через ajax. Это объясняет, почему даже "нормальный" встроенный тег script неожиданно запрашивается с дополнительными параметрами url. Есть способы обойти это, если у вас есть нежелательные побочные эффекты.

  • используйте $.ajaxSetup({ cache: true }) при необходимости

  • используйте prefilter для запросов script и, например, проверять URL-адреса, где вы не хотите случайный параметр, который нужно добавить и установить кеш: true в предфильтре для тех

  • например. успешный вызов назад обрабатывает теги script самостоятельно, делая что-то вместе с ними.

.. lines:

var elems = $(htmlwithscripttags);
elems.filter("script") //now do whatever with the scripts
elems.filter(":not(script)").appendTo("body"); //e.g.

Ответ 2

Майкл прав в его комментарий, и если вы хотите его отключить, используйте: cache: true в запросе ajax. Чтобы включить, используйте cache: false (который я считаю по умолчанию).

Чтобы отключить метку времени:

$.ajax({
    url: content.html,
    cache: true,
    type: 'GET',
    data: someDataObject,
    success: function(data) {
        // some code here

    },
    error: function(data) {
        // some code here
    }
});