2014-11-01 3 views
0

Я не понимаю данные, возвращаемые из jQuery AJAX-запросов, если ответ задерживается. Я бегу запрос каждую секунду, и если ответ задерживается, скажем, на 3 секунды, метод успеха AJAX называетсяjQuery Ajax - отложенный ответ ведет себя странно

  • в Chrome Linux: четыре ответа на один раз каждые 3 или 4 секунды
  • в Firefox Linux: один ответ каждые 3 или 4 секунды

fiddle См:

HTML:

<div id="result"></div> 

JS:

$(document).ready(function(){ 
    updateData(); 

    function updateData(){ 
     doRequest(); 
     setTimeout(updateData, 1000); 
    } 

    function doRequest(){ 
     $.ajax({ 
      url: '/echo/js/', 
      type : "GET", 
      data: { 
       js: "", 
       delay: 3 
      }, 
      success: function(retVal){ 
       $('#result').append(new Date() + '<br>'); 
      }, 
      error: function(error){ 
       alert("Error in network (" + error.status + ")"); 
      } 
     }); 
    } 
}) 

Могу ли я заставить JQuery запустить метод успеха для каждого ответа, а не в какой-либо группе, а также заставить его запустить запрос каждую секунду? Благодаря!

+0

Почему 'ready()' обработчик находится внутри 'doRequest()' ..? –

+0

Вы уверены, что успешные обратные вызовы опущены.? Кстати, вы действительно хотите отправлять запросы каждые 100 мс (это будет удар производительности, ваш скрипт замедляет мой браузер) или вы хотите отправить следующий запрос, как только предыдущий закончен.? Я бы предложил что-то вроде [this] (http://jsfiddle.net/9bcxh3hd/1/). –

+0

@ T J: готовый фиксированный, извините, неправильное положение. Я запускаю скрипт каждую секунду, а не 100 мс, и да, я должен это сделать. Это обновление онлайн-диаграммы данных. – Ajax

ответ

1

Это все о кеше. http://jsfiddle.net/jakecigar/9bcxh3hd/4/ убивает кеш.

Запрос на получение с идентичными параметрами обычно получают из кеша.

$(document).ready(function(){ 
updateData(); 

function updateData(){ 
    doRequest(); 
    setTimeout(updateData, 1000); 
} 

function doRequest(){ 
    $.ajax({ 
     url: '/echo/js/', 
     type : "GET", 
     **cache:false,** 
     data: { 
      js: "", 
      delay: 3 
     }, 
     success: function(retVal){ 
      $('#result').append(new Date() + '<br>'); 
     }, 
     error: function(error){ 
      alert("Error in network (" + error.status + ")"); 
     } 
    }); 
} 
}) 
+0

Ты моя заставка! :) БЛАГОДАРЯ! – Ajax

0

на основе ваших комментариев:

Под <head>:

<script> 
    var second_1=0; 
    var second_2=0; 
    var second_3; 
</script> 

В моей скромной точки зрения, вы должны использовать глобальные переменные для хранения second_1, second_2, а затем использовать данные ответа (как second_3) ,

Итак, используйте данные ответа (на 3-ей секунде) и получите среднее значение этих значений. Избавьтесь от задержки и сделайте примерно следующее:

success: function (data) { 
    second_3=data; //whatever part of data it is you are using 
    var my_average = (second_1 + second_2 + second_3)/3; 
    second_1 = second_2; // 2nd second becomes first 
    second_2 = second_3; // and 3rd second becomes second 
} 

Надеюсь, это поможет.

+0

Хорошая идея , но это не может мне помочь. На брандмауэре нет номера пакета в секунду. Мы должны считать пакеты в течение трех секунд, а затем получить номер. Итак, нет, я не могу заниматься математикой в ​​JS. – Ajax

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