开发者

Sharing variable JavaScript

In following code, I am taking input of an AJAX call into a function called plr(). I want to detect when loading is complete using the done variable. But main thread is locking the variable and the script hangs the browser. If I put the alert in the commented place, the purpose is served. So, what other way can I use to do the same?

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);开发者_如何学Go
        }


Basically you have to make synchronous your ajax call, so there's no need to create an empty (blocking) while. the callback plr() will be executed on successful response, then remaining data will be called inside that callback

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


You should not wait that actively for the result. When the AJAX call is successfully finished you have the callback function called. In your case it seems that it is plr (although it is not clear what LoadContentInto exactly does).

It seems you have a temptation to make the AJAX success callback synchronous. Sometimes I used to have such passions, but so far it always showed up that there is an asynchronous way as well.

Maybe you want something like that:

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
}

Few comments to your code:

  • you have done declared as a global variable, it is very likely that it should be local
  • while (done != true) is much cleaner as while (!done)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜