共享变量javascript

时间:2010-11-23 14:14:10

标签: javascript ajax javascript-events

  

在下面的代码中,我正在接受输入   将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);
        }

2 个答案:

答案 0 :(得分:1)

基本上你必须同步你的ajax调用,所以没有必要创建一个空(阻塞)while。回调plr()将在成功响应时执行,然后将在该回调中调用剩余数据

http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAX

答案 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)
  • 更清晰