我没有立即明白为什么它不返回它,但我仍然会使用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
).
如果有任何可以避免的方法, 躲开它。同步请求完全锁定大多数浏览器的 UI(不仅仅是页面的 UI,还包括浏览器管理的每个选项卡中的每个页面)。由于 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 工作),该请求将失败,因为同源政策 http://en.wikipedia.org/wiki/Same_origin_policy。绕过 SOP 的多种方法:
- JSONP http://en.wikipedia.org/wiki/JSONP#JSONP
-
CORS http://www.w3.org/TR/access-control/(但它需要浏览器支持,并且 www.google.com 允许来自您的来源的请求)
- 使用YQL作为代理 http://ajaxian.com/archives/using-yql-as-a-proxy-for-cross-domain-ajax