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