JQuery версии 1.5 - AJAX - <script>проблема с меткой времени - PullRequest
12 голосов
/ 17 февраля 2011

Если я загружаю контент с помощью 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, откуда он загружает код скрипта после того, как я вставил на страницу предыдущее содержимое:

.../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
    }
});

Спасибо.

Ответы [ 2 ]

8 голосов
/ 17 февраля 2011

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

Ответ:

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

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

  2. используйте prefilter для запросов сценариев и, например, проверьте URL, где вы не хотите, чтобы случайный параметр был добавлен, и установите кеш: true в предварительном фильтре для этих

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

.. строк:

var elems = $(htmlwithscripttags);
elems.filter("script") //now do whatever with the scripts
elems.filter(":not(script)").appendTo("body"); //e.g.
7 голосов
/ 17 февраля 2011

Майкл прав в своем комментарии , и если вы хотите его отключить, используйте: 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
    }
});
...