Api用のJavaScriptインターフェイスを作成しようとしていますが、この問題を把握することはできません。私はajaxリクエストを呼び出すコードを持っています:変数が変更されたときに出力するデータを取得するためのヘルプ
mooshark.request('userInfoFromID', {
userID : '20991'
});
そのコードはAjaxリクエストを作成します。起動すると、内部変数がtrueに設定されます(実行中であることを示すため)。その後、私はこれを持って次の行に次のように
var data = mooshark.response();
alert(data);
応答関数は次のとおりです。
response: function() {
if(this.running == false){
return "done";
} else if (this.running == true){
alert("Running");
setTimeout(this.response, 3000);
}
}
それが(この順序で)ランニングを出力します。未定義。 (JSONレスポンス)。ランニング。一度も "done"を出力しません。 this.runningが成立したときに "done"を返す方法はありますか?私は、この実行がいつも同じ要求時間になるとは限らないことに言及したいと思います。私は、常にajaxリクエストのonCompleat関数内にすべてのコードをラップするオプションがあることを知っていますが、私は最後の手段としてそれを持っています。
ありがとうございます!
は、要求オブジェクトに対して 'async:false'を渡します。それはUIスレッドをフリーズし、応答を待つが、setTimeoutの方法よりもうまくいくかもしれないし、受け取ったデータを返すのでやっかいだ。なぜあなたは 'onComplete'を最後の手段と考えているのか理解できません。なぜなら、あなたのクラスが' Request'を拡張している場合、 'this.response'をネイティブオブジェクトと衝突させるということです。 mootoolsはXHRの応答オブジェクトを格納するために使用します(例えば、onCompleteでは 'this.response.text'などを問い合わせることができます) –