Я не сразу понимаю, почему он не возвращает его, но я все равно использовал бы обратный вызов success
:
function LoadBookmarksAsXml()
{
var result;
$.ajax(
{
type: 'GET',
async: false,
url: 'http://www.google.com/bookmarks/?output=xml&num=10000',
success: function(data) {
result = data;
}
});
return result;
}
Даже если $.ajax
возвращает объект XMLHttpRequest
(в версии 1.4 или более ранней) или объект jqXHR
(в версии 1.5+), я все же предпочел бы использовать функцию success
и функцию error
для ясность. Кроме того, разные версии jQuery дают разные значения для responseText
при ошибке (по крайней мере, в Chrome; 1.4.4 возвращает пустую строку, 1.5.0 возвращает undefined
).
Если есть , каким-либо образом вы можете избежать этого , избегайте его. Синхронные запросы полностью блокируют пользовательский интерфейс большинства браузеров (не только пользовательский интерфейс вашей страницы, каждую страницу каждой вкладки, которой управляет браузер). Поскольку запросы Ajax могут занимать секунду или две (или пять, или десять), это создает очень неприятный пользовательский опыт. Почти все время вы можете избежать этого путем рефакторинга вашей функции, чтобы она принимала обратный вызов для использования для предоставления результата:
function LoadBookmarksAsXml(callback)
{
$.ajax(
{
type: 'GET',
url: 'http://www.google.com/bookmarks/?output=xml&num=10000',
success: function(data) {
callback(data);
},
error: function() {
callback(null);
}
});
}
Не по теме : я буду удивлен, если запрос вообще будет работать, потому что, на первый взгляд (если вы не работаете в Google), этот запрос не будет выполнен из-за Та же политика происхождения . Различные способы обойти СОП: