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. Есть способы обойти это, если у вас есть нежелательные побочные эффекты для вас.
использование
$.ajaxSetup({ cache: true })
когда уместноиспользуйте предварительный фильтр для запросов сценариев и, например, проверьте URL, где вы не хотите добавлять случайный параметр, и установите для них значение cache: true в предварительном фильтре.
например, при успешном обратном вызове обработайте теги сценария самостоятельно, выполнив что-то подобное.
..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
}
});