我正在进行跨域调用。这需要更多的时间(几毫秒或1)。
所以下面的代码正在执行。
var xdr;
if (window.XDomainRequest) // Check whether the browser supports XDR.
{
xdr = new XDomainRequest(); // Create a new XDR object.
if (xdr) {
xdr.onload = function () {
var data = $.parseJSON(xdr.responseText);
AddData(data, link);
};
xdr.open("post", urlSearch);
xdr.send();
}
else {
alert('Server Error!! Try Later.');
}
}
else {
alert("Not IE 8");
}
我想做同步。这样,在调用完成后,下面的代码将执行
请帮助
提前谢谢。
只是澄清一下,因为一些"JavaScript"程序员实际上往往是jQuery程序员(我怀疑他们是否真的是这样,我说的是评论)。
回到主题。谷歌搜索几分钟后,XDomainRequest对象似乎不支持同步调用。
这其实很好。你不知道的是,同步AJAX(注意同步AJAX本身就是一个矛盾——第一个a代表异步)是浏览器中一切邪恶的根源。为什么?因为JavaScript是单线程的,所以当用户等待请求完成时,他什么都做不了——整个页面都被阻止了(在一些更糟糕的情况下,比如我认为的IE8,整个浏览器都被阻止)。
那么你该怎么办呢?你应该像每一个优秀的JavaScript程序员一样,以异步的方式编写代码。例如:
var xdr;
if (window.XDomainRequest) { // Check whether the browser supports XDR.
xdr = new XDomainRequest(); // Create a new XDR object.
xdr.onload = function () {
var data = $.parseJSON(xdr.responseText);
AddData(data, link);
// other code goes here
};
xdr.onerror = function () {
alert('Server Error!! Try Later.');
};
xdr.open("post", urlSearch);
xdr.send();
} else {
alert("Not IE 8");
}
如果您有更多依赖于xdr
的代码,那么只需将其添加到onload
处理程序中(您可以将其封装在一个单独的函数中,使其更易于阅读)。