Com*_*eek 4 javascript jquery xmlhttprequest synchronous
为什么不在responseText中返回该函数?
function LoadBookmarksAsXml()
{
return $.ajax(
{
type: 'GET',
async: false,
url: 'http://www.google.com/bookmarks/?output=xml&num=10000'
}).responseText;
}
Run Code Online (Sandbox Code Playgroud)
(如果我定义了一个成功的回调函数并将async设置为true,它可以工作!)提前感谢!!
编辑:不要担心跨域调用; user603003表示(在对已删除的答案的评论中),这是在允许跨域请求的Chrome扩展程序中.
如果有人想要做同样的解决方案:
return $.ajax(
{
type: 'GET',
async: false,
url: 'http://www.google.com/bookmarks/?output=xml&num=10000',
});
Run Code Online (Sandbox Code Playgroud)
(您将获得XMLHTTPRequest对象.)
T.J*_*der 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;
}
Run Code Online (Sandbox Code Playgroud)
即使$.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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
偏离主题:如果请求完全有效,我会感到惊讶,因为从表面上看(除非您为Google工作),该请求将因同源策略而失败.各种方法来绕过SOP:
| 归档时间: |
|
| 查看次数: |
12240 次 |
| 最近记录: |