我正在进行跨域调用。 这需要更多时间(几毫秒或一秒)。
以下代码正在执行。
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");
}
我想做同步。 所以在完成调用之后,代码将执行
请帮助
提前致谢。
答案 0 :(得分:4)
只是为了澄清一下,因为一些“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
处理程序(您可以将其包装在单独的函数中以使其更易于阅读)。