2011-12-16 2 views
1

На загрузке страницы я загружаю html-страницу через jquery ajax. Эта страница html содержит «представление» и отображается в разделе «основной контент» макета сайта. посмотреть пример HTML, который загружается:firefox добавляет параметр querystring к внешнему файлу javascript

<div>hello world</div> 
<script src="/javascript.js" type="text/javascript"></script> 

Проблема заключается в том, что Firefox загружает javascript.js, добавив уникальный параметр строки запроса к нему ... предотвращая его кэширования.

Firebug показывает: GET http://nodejs/javascript.js?=_1324005635768

Это происходит только для JavaScript загружен динамически в представлении. Javascripts в загрузке макета сайта и кеше отлично. Firebug показывает, что jquery ajax возвращает нормальный вид без параметра querystring, поэтому его добавляет firefox.

Как исправить это?

+0

Вы уверены, что правильно настроили опцию 'cached' для вызова ajax? – zzzzBov

+0

$ ('. Main_content'). Load ('/ templates /' + template_name + '.html', function() { if (pushState) window.history.pushState ('', '', url); if (f! = null) { f(); } }); Это то, что я делаю, возвращенные данные показывают javascript без параметра querystring .. поэтому это Firefox добавляет его. – firebird

+0

На самом деле, я только что сделал предупреждение (main_content.html()) после того, как загрузка закончена ... скрипт отсутствует ... jquery, похоже, отключает его и загружает через вызов по запросу. – firebird

ответ

0

Нагрузка - короткая рука для .ajax(). используйте это вместо этого и установите кеш на false

$.ajax({ 
    url: '/templates/' + template_name , 
    success: function(data) { 
    $('.main_content').html(data) 
    }, 
    cache: false 
}); 
+0

ха? Я хочу, чтобы он был кэш в первую очередь. – firebird

+0

Эта строка запроса добавлена ​​в конец, это то, что добавлено, чтобы убедиться, что она кэшируется. если вы не хотите запрашивать добавленную строку, тогда кеш должен быть установлен в false. –

+0

Я пробовал, он не работает. Сама страница html кэшируется (304) ... но

3

Его не firefox, его jquery и вызов ajax. Либо использовать POST, а не получить или

С JQuery (link)

cacheBoolean По умолчанию: True, False для DATATYPE 'сценария' и 'JSONP'

Если установлено значение ложь, это заставит запрошенные страницы не кэшироваться браузером. Установка кеша в значение false также добавляет к строке URL строки запроса "_ = [TIMESTAMP]".

Мой совет отправляется по почте, и ваши проблемы уходят.

1

Убедитесь, что параметр кеша установлен в значение true.

jQuery.ajax({ 
    url: "test.html", 
    cache: true 
}) 

jQuery по умолчанию кэширует значение true, если тип данных не является «скриптом» или «jsonp». http://api.jquery.com/jQuery.ajax/ Кажется, что в вашем случае тип данных является «скриптом», поэтому он не кэширует результат.

1

jQuery по умолчанию добавит этот уникальный запрос для скриптов, и поскольку запрос выполняется внутренне, вы не можете его отключить напрямую.

Это должно удалить строку запроса '_' из этих запросов.

$.ajaxSetup({ 
    beforeSend: function(jqXHR, settings) { 
     if (settings.dataType === 'script') { 
      settings.url = settings.url.replace(/\??&?_=[0-9]+/, ''); 
     } 
    } 
}) 
Смежные вопросы