2012-06-07 3 views
0

Я пытаюсь использовать вызов jQuery $ .ajax для возврата xml из веб-службы. Если вызов этой веб-службы выходит из строя, по какой-то причине у меня есть статический xml, который я хочу использовать. Я пытаюсь использовать свойство timeout, чтобы сообщить мне, был ли вызов неудачным или нет, и поместил логику синтаксического анализа xml в мою функцию ошибки. Я знаю, что синтаксический анализ xml отлично работает, потому что я проверил его с удалением вызова ajax. Когда я добавляю вызов ajax с фиктивным url для принудительной ошибки, переменная $ xml var никогда не будет установлена. Есть предположения?Получить XML из webservice со статическим резервным значением

var navXml = '<?xml version="1.0" encoding="utf-8" ?><book><chapter id="1"></book>'; //static xml here 
var serviceUrl = 'http://1234lkjasdf/test'; //bad service url to test failure 
var $xml; 

$.ajax({ 
type: 'GET', 
dataType: 'xml', 
url: serviceUrl, 
timeout: 10, 
success: function(data, status){ 
    //set $xml var to xml data returned 
    $xml = data; 
}, 
error: function (req, status, error){ 
    //set $xml var to xml parsed from static value 
    xmlDoc = $.parseXML(navXml), 
     $xml = $(xmlDoc); 
} 
}); 
+0

Я нашел проблему, мой вызов ajax делался асинхронно, так что он ожидал, что тайм-аут будет устанавливать переменную $ xml, а остальная часть кода выполнялась. Таким образом, остальная часть моего кода выполнялась, в то время как переменная $ xml все еще была нулевой. Я просто добавил свойство async к моему вызову ajax и установил его в false, чтобы исправить это. Хотя после нескольких исследований, похоже, я должен использовать метод $ .wait() вместо того, чтобы нарушать асинхронную природу ajax как лучшей практики. – str8killinit

ответ

1

EDIT

Похоже, любая ошибка в $ .ajax обработчик ошибок молча выходит из строя. У вас есть ошибка в XML. Тег вашей главы не закрыт. Это должно быть:

<chapter id="1" /> 

Когда я исправляю ошибку в XML, она работает. Вот скрипку для этого: http://jsfiddle.net/Pzdv5/1/


Ваш обработчик ошибок должен выглядеть следующим образом:

//set $xml var to xml parsed from static value 
var xmlDoc = $.parseXML(navXml); 
$xml = $(xmlDoc); 

У вас не хватает вар перед xmlDoc (создаст глобальную переменную), и многое другое важно, что вместо объявления xmlDoc у вас есть запятая (,) вместо точки с запятой (;).

+0

, что тоже не работало для меня. Фактически, я протестировал исходную логику вне обработчика ошибок и отлично работает (не объявляя xmlDoc и запятую после первой строки). – str8killinit

+0

вы проверили, даже ли он попадает в обработчик ошибок? console.log (ошибка) или что-то еще? –

+0

Да, я добавил предупреждение в обработчик ошибок, и он срабатывает. – str8killinit

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