jQuery версии 1.5 - ajax - проблема с отметкой времени тега <script>

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

Решение

Смотрите ниже ответ, что я получил от команды 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. используйте предварительный фильтр для запросов сценариев и, например, проверьте URL, где вы не хотите добавлять случайный параметр, и установите для них значение cache: true в предварительном фильтре.

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

..lines:

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

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