Ошибка AJAX: данные, необходимые для выполнения этой операции, недоступны - PullRequest
1 голос
/ 24 июня 2009

Время от времени я получаю эту ошибку в IE при отправке AJAX-запроса обработчику, который возвращает небольшой ответ типа text / plain. Кажется, эта ошибка начнет происходить, возникнет несколько раз, а затем прекратится. Очень раздражает.

Я использую новейшую библиотеку jQuery. Ошибка вызывает функцию complete (), когда я пытаюсь получить доступ к xhr.responseText. Как я могу предотвратить это?

  $.ajax({
    url: "Inquire.ashx",
    data: data,
    dataType: "text",
    timeout: 5000,
    complete: function(xhr, status) {
      var resp = xhr.responseText; // ERROR!

      if(resp.substr(0, 4) == "http")
        window.open(resp, "PopWin");
      else
        showError(resp);
    }
  });

Ответы [ 3 ]

1 голос
/ 08 августа 2009

Я знаю, что этому вопросу больше месяца, но я думаю, что знаю, в чем заключалась ваша проблема.

Обратный вызов complete () выполняется после вызова обоих success () или error (). Я подозреваю, что в вашем случае истекло время ожидания вашего вызова, и поэтому, если бы вы предоставили обратный вызов с ошибкой, он бы сработал, но в этом случае complete () вызывается с readyState на 3. Просто увеличьте время ожидания и / или проверьте это состояние ошибки.

0 голосов
/ 13 июля 2009

Как выяснилось, ошибка была вызвана тем, что свойство readyState для XmlHttpRequest было равным 3, что означает, что запрос все еще обрабатывается. Я не понимаю, почему jQuery запускает мою полную функцию до того, как readyState достигнет 4! Я поместил это в самый верх моего успешного обратного вызова и не вижу ошибки с тех пор ...

  if(xhr && xhr.readyState != 4) {
    setTimeout(arguments.callee, 50);
    return;
  }

Это очень уродливое решение, которое я ненавижу, но, похоже, оно решает проблему.

0 голосов
/ 24 июня 2009

Я не использовал функции jQuery Ajax напрямую, поэтому я просто догадываюсь здесь, но:

Вы пытались использовать success вместо complete?

Вы пробовали другие dataType с? Основываясь на документации jQuery , я бы не ожидал, что текст dataType вернет объект, но вряд ли это будет проблемой, если он работает большую часть времени.

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