在下面的代码中,我正在接受输入 将AJAX调用调用到一个名为的函数中 PLR()。我想在加载时检测到 使用'done'变量完成。 但主要线程是锁定 变量和脚本挂起 浏览器。如果我把警报放在 评论的地方,目的是 提供服务。那么,我可以使用其他什么方式 做同样的事。提前谢谢..
function openX() {
LoadContentInto("Default.aspx", plr);
var obj = null;
done = false;
function plr() {
x = this.AJAXObject.responseText;
t = x.indexOf('{')
n = parseInt(x.substring(0, t));
s = x.substring(t, n + t);
p = eval('(' + s + ')');
obj = p;
done = true;
}
while (done != true)
{ // alert("hello");
}
alert(done);
}
答案 0 :(得分:1)
基本上你必须同步你的ajax调用,所以没有必要创建一个空(阻塞)while。回调plr()
将在成功响应时执行,然后将在该回调中调用剩余数据
答案 1 :(得分:0)
你不应该积极地等待结果。成功完成AJAX调用后,您将调用回调函数。在你的情况下,它似乎是plr
(虽然不清楚LoadContentInto
究竟做了什么)。
似乎你有诱惑让AJAX成功回调同步。有时我曾经有过这样的激情,但到目前为止,它总是表明存在异步方式。
也许你想要这样的东西:
function openX() {
LoadContentInto("Default.aspx", plr);
var obj = null;
var done = false; // you have your variable global! Make it local!
function plr() {
x = this.AJAXObject.responseText;
// ...
// put your code here
// ...
alert("Done!");
done = true;
}
setTimeout(function(){
if (!done) {
alert("Please wait!");
// Does the response and/or the operation after the responseText arives take a long time?
// Based on that decide how to inform the user
}
}, 100); // Set the timeout to right value.. based on your needs
}
您的代码几乎没有评论:
done
声明为全局变量,它很可能是本地的while (done != true)
比while (!done)