JQuery AJAX ответ на вызов никогда не возвращается - PullRequest
1 голос
/ 07 декабря 2010

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

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

Единственное, что я заметил при использовании firebug, это то, что, похоже, что-то не так с заголовками ответов.

По сравнению с успешным звонком они в другом порядке, и некоторая информация полностью отсутствует. У Content-Type всегда больше типов, чем text/html, которые я определяю в своем $.ajaxSetup.

$.ajaxSetup({
  dataType:'html',
  cache:false,
  type:'POST',
  timeout:15000,
  error:function() {
    alert('Action aborted please try again');
  },
  complete:function(XMLHttpRequest,textStatus){
    //console.log('XMLHttpRequest.readyState : '+XMLHttpRequest.readyState+'\nXMLHttpRequest.statusText : '+XMLHttpRequest.statusText+'\nXMLHttpRequest.status : '+XMLHttpRequest.status+'\ntextStatus : '+textStatus);
  }
 });

и пример моих вызовов ajax:

var dataString = 'value='+value+'&value1='+value1+'&value2='+value2;
   $.ajax({
    url:'file.php',
    data:dataString,
    success:function(resp){
      alert(resp);

    }
   })

такое поведение происходило намного чаще до того, как я добавил dataType, а также оно происходило чаще при локальном просмотре на машине winXP SP3 с использованием xampp, и я думаю, что и firefox, и IE.

Я проверил на сервере под управлением Windows Server 2008 и Apache и PHP автономных не XAMPP, что происходит и происходит даже меньше. С моим домашним компьютером, почти никогда не бывает, что вышеописанное тестирование было на моем офисном компьютере.

кто-нибудь сталкивался с подобным типом поведения или, может быть, есть способ кодировать мои вызовы ajax по-другому.

Я бы не хотел использовать плагин, и длительный опрос на сервере Apache кажется слишком тяжелым.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2010

Вы имеете в виду что-то вроде этого:

var dataString= {
    value: value,  
    value1: value1
};

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

Я прилагаю скриншот из Firebug:

Firebug

0 голосов
/ 07 декабря 2010

То, как вы используете вызов jquery ajax, технически правильно. Одно из предложений, которое я хотел бы сделать, - не создавать строку данных вручную, как у вас. Вы можете передать литерал объекта в параметр data и позволить jquery выполнить преобразование строки для вас. Это дает дополнительное преимущество, позволяя jquery выполнять правильное экранирование, которое иногда может портить XMLHttpRequest. Кроме этого, я бы порекомендовал использовать команду console.trace () в firebug, чтобы увидеть, действительно ли вы делаете два вызова .ajax и почему. Есть слушатель 'beforeSend', который вы можете установить в своем ajaxSetup - это может быть хорошим местом для его установки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...