为什么不将该函数返回给responseText?
function LoadBookmarksAsXml()
{
return $.ajax(
{
type: 'GET',
async: false,
url: 'http://www.google.com/bookmarks/?output=xml&num=10000'
}).responseText;
}
(如果我定义了success-callback-function并将async设置为true,则它可以工作!) 在此先感谢!!
修改:不要担心跨域调用; user603003说(在对现已删除的答案的评论中),这是在允许跨域请求的Chrome扩展程序中。
解决方案,如果有人想要这样做:
return $.ajax(
{
type: 'GET',
async: false,
url: 'http://www.google.com/bookmarks/?output=xml&num=10000',
});
(您将获得XMLHTTPRequest对象。)
答案 0 :(得分:10)
我没有立即看到为什么它没有返回它,但我仍然使用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工作),该请求将因{而失败{3}}。各种方法来绕过SOP:
答案 1 :(得分:1)
$.ajax
永远不会返回响应文本,它总是返回为进行Ajax调用而创建的XMLHTTPRequest对象。
我仍然需要定义一个成功的回调,例如一个设置一个局部变量,然后你可以返回。
标准免责声明:同步请求通常是不鼓励的,因为它们可以冻结当前页面。
答案 2 :(得分:0)
等待函数的响应不是异常的,ajax调用在完成时会有响应,你必须通过定义成功事件的回调来处理响应。
您必须将代码分解为至少两部分。第一部分是在ajax调用之前,第二部分是在成功之后,并且在成功回调中将您想要做的所有事情与所请求的数据放在一起。异步请求以这种方式工作。
答案 3 :(得分:0)
这样做真的很糟糕。 Javascript将在HTTP请求的持续时间内阻塞,也就是说,在ajax调用返回之前,UI线程中的任何其他内容都不会运行。使用回调。
答案 4 :(得分:0)
按照设计,异步请求无法提供响应文本;-) 您必须设置回调函数并决定如何处理responseText。