0

社内のカスタム ライブラリを使用して jsonp 呼び出しを複製しています。JQueryやその他のライブラリを使用するように頼まれる前に、いくつかの制約のために使用できないことを教えてください.

以下は、リクエストを行うために使用されるコードです。

BurrpJsonAjaxRequest.prototype.send = function() {
   this.script = document.createElement("script");
  this.script.type = "text/javascript";
  this.script.charset = "UTF-8";
  this.script.src = this.URL;

  if (typeof(this.callBack) == "function") {
    this.script.callback = this.callBack;
  }

  var currRequest = this;

  //sleep(100);

  if (this.script.src.readyState) {  //IE
    this.script.src.onreadystatechange = function() {
      if (this.script.src.readyState == "loaded" ||
        this.script.src.readyState == "complete") {
        this.script.src.onreadystatechange = null;
        currRequest.hideLoading();
        currRequest.callback();
      }
    };
  } else {  //Others
    this.script.src.onload = function() {
      currRequest.hideLoading();
      currRequest.callback();
    };
  }


  this.docHead.appendChild(this.script);
};

これは、最初に実行されたときに機能します。後続の実行では、リクエストは行われますが、コールバックは実行されません。

以下のように sleep メソッド (コードでコメント) を使用すると、コールバックは後続の呼び出しでも実行されます。

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i  milliseconds){
      break;
    }
  }
}

スリープはコールバックの実行にどのように影響しますか? ただし、Firefoxでは正常に動作します。

4

1 に答える 1

0

最初は、this.script.src.readyState がfalse (スクリプトがまだロード中) であり、onLoad イベントのハンドラーが作成されます。onLoad がトリガーされると、匿名の onLoad 関数が呼び出されます。これは、onReadyStateChange ハンドラーに非常に似ているように見えます。ただし、onLoad は 1 回だけトリガーされるため、関数は 1 回だけ呼び出されます。

スリープは enuf の実行を遅くするため、if ステートメントを実行するとthis.script.src.readyState がtrueになります。

どう思いますか?

于 2010-02-12T17:12:32.533 に答える