Функция ошибки JQuery ajax выполняется, даже если запрос выполнен успешно - PullRequest
8 голосов
/ 09 июня 2009

Я пытаюсь изучить JQuery - и у меня небольшая проблема с ajax. Я пытаюсь заполнить массив javascript значениями, возвращенными в ответе XML со страницы.
Вот моя главная страница (ajax.html):

<html>
<head>
<script type="text/javascript" src="jquery/jquery.js"></script>
<script type="text/javascript" src="jquery/fiber.js"></script>
</head>
<body>
<p>Ajax</p>
<script>
var ringType = new Array();

</script>
</body>
</html>

fiber.js это:

//process things for fiber map
jQuery(document).ready(function() {
// do stuff when DOM is ready

//populate and display ringType
$.ajax({
  type: "GET",
  url: "ajaxHelper.pl",
  data: {
      getRingTypes: "1",
      },
  dataType: "xml",
  success: function(xml) {
      //if the query was successfull,
      alert("Got an xml object:"+$(xml));
      $(xml).find("ringType").each( function(){
          alert("Received reply "+$(this).text());
          var type = $(this).html(); //save the value
          //append to ringType array
          ringType.push(type);
      });
  },
  error:function (xhr, ajaxOptions, thrownError){
      alert(xhr.status);
      alert(thrownError);
  }
 });
 for(var i=0; i<ringType.length; i++){
    document.write("<br>"+ringType[i]);
 }

});

ajaxHelper.pl генерирует этот XML (без обратной косой черты в \?) (В виде текстового типа / xml):

<?xml version="1.0" encoding="ISO-8859-1"?>
    <\?xml version="1.0" encoding="ISO-8859-1"\?>
    <ringType>IA</ringType>
    <ringType>IL</ringType>
    <ringType>IN</ringType>
    <ringType>IR</ringType>
    <ringType>RT</ringType>

Проблема в том, что каждый раз, когда я загружаю ajax.html, запрос ajax выполняется успешно, но выполняется функция ошибки! xhr.status = 200 (что означает, что запрос был в порядке), а исключение thrownException не определено.

Ответы [ 3 ]

5 голосов
/ 31 декабря 2009

через http://groups.google.com/group/jquery-en/browse_thread/thread/23679594ebe128a9

сервер может вернуть XML-документ с кодом состояния 200. Но если браузер не может проанализировать документ, произойдет ошибка синтаксического анализа и будет вызван обработчик ошибок jQuery.

Убедитесь, что вы возвращаете действительный xml:)

4 голосов
/ 09 июня 2009

Это происходит во всех браузерах?

1) Вы можете использовать complete вместо успеха и ошибки для обработки статуса. Используйте if для проверки статуса возврата XHR и ответвления соответственно.

http://docs.jquery.com/Ajax/jQuery.ajax#options

1 голос
/ 09 июня 2009

AJAX является асинхронным. Это означает, что функция $ .ajax запустит запрос ajaxHelper.pl. Тем временем он продолжает выполнять ваш код. У запроса нет шансов вернуться, пока вы не достигнете следующей строки после $ .ajax (...)

for(var i=0; i<ringType.length; i++){...

Итак, я полагаю, вы получаете исключение, что ringType не определен ...? И это может быть причиной срабатывания функции ошибки.

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