Кэшированные страницы AJAX не работают - PullRequest
2 голосов
/ 24 ноября 2010

Всякий раз, когда страница кэшируется как в Firefox, так и в Webkit, она теряет все возможности ajax.

<html manifest=cache.manifest>
<head>
    <script src="js/jquery.js" type="text/javascript"></script>
    <script src="js/jqtouch.js" type="text/javascript"></script>

Он будет извлекать только те страницы, которые были кэшированы, несмотря ни на что. Кто-нибудь знает, как это исправить? Заранее спасибо! РЕДАКТИРОВАТЬ: Ajax код:

    var http = false;
    if(navigator.appName == "Microsoft Internet Explorer") {
      http = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
      http = new XMLHttpRequest();
    } 

  http.open("GET", "default.css", true);
http.setRequestHeader('CacheControl', "no-cache");
  http.onreadystatechange=function() {
    if(http.readyState == 4) {
      alert('4(good):'+http.responseText);
    }
  }
  http.send(null);

Также для запроса используется jquery $ .ajax. Ни одна из них не работает. JQuery:

    $.ajax({

    url: site_url,

    cache: false,

    dataType: 'html',

    data: ({uuid : devid}),

    success: function(response){

Они всегда говорят, что успешно, но возвращают данные, только если страница кэширована. В противном случае они возвращают ноль "".

И последнее: я запрашиваю страницы, не указанные в манифесте, из-за довольно большой серверной части. Невозможно иметь все страницы в манифесте.

По сути, как бы я мог получить доступ к страницам НЕ в манифесте на том же сайте AJAX. Всякий раз, когда я пытаюсь в настоящее время, он всегда возвращает ноль. возврат 03:11:41 даже без кеша и т. д.

Ответы [ 4 ]

1 голос
/ 24 августа 2011

Я некоторое время пытался заставить работать cache.manifest, и он продолжал давать мне похожие ответы.У меня есть мобильное приложение jquery, которое использует веб-сервис для получения данных и не работало, пока я не добавил веб-сервис в раздел NETWORK моего файла cache.manifest

    CACHE MANIFEST
    # This is a comment.
# Cache manifest version 0.1.3.5
# If you change the version number in this comment,
# the cache manifest is no longer byte-for-byte
# identical.




NETWORK:
# All URLs that start with the following lines
# are whitelisted.

Service.svc

CACHE:
# Additional items to cache.

src/jquery-1.6.2.min.js
src/jstorage.min.js
src/jquery.numeric.js
src/jquery.format-1.1.min.js
assets/json2.min.js
assets/jquery.signaturepad.css
assets/jquery.signaturepad.min.js
jquery.mobile-1.0b2/jquery.mobile-1.0b2.min.css
jquery.mobile-1.0b2/jquery.mobile-1.0b2.min.js
jquery.mobile-1.0b2/images/ajax-loader.png
jquery.mobile-1.0b2/images/icon-search-black.png
jquery.mobile-1.0b2/images/icons-18-black.png
jquery.mobile-1.0b2/images/icons-18-white.png
jquery.mobile-1.0b2/images/icons-36-black.png
jquery.mobile-1.0b2/images/icons-36-white.png
src/link-1-3.js
src/events-1-3.js
src/custom-styles.css
Login.html
1 голос
/ 24 ноября 2010

Это не правда.Если вы явно запрашиваете данные со страницы, она повторно загружает их для вас.Вы можете проверить это, открыв Firebug или окно отладки Chrome и наблюдая, как браузер отправляет http-запрос.

0 голосов
/ 24 ноября 2010

Приведенный ниже код в IE выполняет серверный вызов, поскольку вы кешируете, что он не выполняет последующие вызовы ...

if(navigator.appName == "Microsoft Internet Explorer") {
      http = new ActiveXObject("Microsoft.XMLHTTP");
0 голосов
/ 24 ноября 2010

по умолчанию ajax-функции jquery будут получать данные, которые он получает (за исключением json & jsonp).Вы можете указать ajax-вызову не кэшировать, используя следующее:

$.ajax({
  cache: false
})
...