2013-08-24 4 views
1

в начале я хотел бы сказать извините за мой плохой английский.jquery ajax асинхронные запросы error

JQuery v2.0.0 в Google Chrome, Mozilla Firefox, Opera последних версий

Сегодня у меня была проблема

timer_multy_update = setInterval(
    function() 
    { 
     $.get(
      'test.php', 
      function (result){ 
       parseAndUpdateData(result); 
      }, 
      "json" 
     ); 
    }, 500) 

Проблема в том, что если сервер виснет (я не знаю, как скажем, правильно), то есть время, чтобы получить ответ от сервера более 0,5 секунды, но таймер не остается и продолжает отправлять запрос, поэтому перед ответом сервера можно отправить запрос 2-4, все это ответ вернется для мало времени и, теперь проблема, в firebug все запросы правильные, но результат переменной содержит только один ответ от первого ответа от сервера. может быть, я не выразил себя ясно, я хочу сказать, что запрос 2-4 на сервер возвращает другой ответ, но в результате получает все в 2-4 раза первый ответ с сервера, и это большая проблема.

Я попытался найти информацию в Интернете, но ничего не нашел.

Я не знаю, почему, но первая мысль заключалась в том, что ошибка в jquery, я начал смотреть на исходный код и нашел некоторое упоминание о heder и хэшах. Так я пытаюсь изменить мой сценарий и найти на пути

$.get 
(
    '/php/mine/update_cells.php', 
    't='+Math.random(), 
    function (result) 
    { 
     parseAndUpdateData(result); 
    }, 
    "json" 
); 

работает правильно , так что я хочу сейчас, ошибка это или моя ошибка, и не понимая

+0

потому что вы добавили math.random, URL-адрес разный каждый раз, поэтому ресурс не обходится браузером. –

ответ

0

Это не ошибка, это кэширование. Это намного эффективнее для браузера, чтобы кэшировать ресурс на некоторое время, тогда нужно идти и получать его каждый раз, когда кто-то хочет его. Это нормально для статических ресурсов, то есть тех, которые не сильно меняются, но для веб-службы, которая часто приводит к различным результатам для одного и того же URL-адреса, вы хотите отключить кеширование. Если вы управляете кодом на стороне сервера, добавьте в ответ заголовок Cache-Control: no-cache. Вы можете отключить кеширование в jQuery, но, насколько я знаю, вы должны использовать функцию ajax() - нет способа сделать это с помощью get().

$.ajax({ 
    url: "/php/mine/update_cells.php", 
    success: function(result){ 
    parseAndUpdateData(result); 
    }, 
    cache: false, 
    dataType: 'json' 
}); 
+0

Я добавляю заголовок, но он не имеет эффекта 'Accept: application/json, text/javascript, */*; q = 0,01 Accept-Encoding: gzip, deflate, sdch Accept-язык: ru-RU, ru; q = 0.8, en-US; q = 0.6, en; q = 0.4 Кэш-контроль: no-cache Соединение: keep-alive Cookie: id = Xb97FxROHEni7bGg; к = L4UHWE47zPhO2rEa Pragma: нет кэша User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537,36 (KHTML, как Gecko) Chrome/28.0.1500.95 Safari/537,36 X-Requested-With: XMLHttpRequest' – user2713024

+0

второй способ работает так же, как и мой) /php/land/update_cells.php?_=1377328853001 , который присваивается $ .ajax с кешем: false – user2713024

+0

@ user2713024 Вам нужно добавить его в заголовки ответов. Они выглядят как заголовки запросов. – RobH

Смежные вопросы