2010-12-27 7 views
0

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関数内にすべてのコードをラップするオプションがあることを知っていますが、私は最後の手段としてそれを持っています。

ありがとうございます!

+0

は、要求オブジェクトに対して 'async:false'を渡します。それはUIスレッドをフリーズし、応答を待つが、setTimeoutの方法よりもうまくいくかもしれないし、受け取ったデータを返すのでやっかいだ。なぜあなたは 'onComplete'を最後の手段と考えているのか理解できません。なぜなら、あなたのクラスが' Request'を拡張している場合、 'this.response'をネイティブオブジェクトと衝突させるということです。 mootoolsはXHRの応答オブジェクトを格納するために使用します(例えば、onCompleteでは 'this.response.text'などを問い合わせることができます) –

答えて

0

これはブラウザをフリーズすることなく可能です。

コードが実行されているときはいつでも、ブラウザのUIは完全にフリーズします。
サーバが応答するのをコールが待つようにするには、ブラウザを凍結する必要があります。 (良い考えではありません)

+0

ありがとう。他のアプローチを試してみる必要があります。 – Colum

0

ほとんどの場合、setTimeout()でresponse()を呼び出すので、戻り値はあまり役に立ちません。

しかし、「実行中の」変数を決してfalseに設定していない可能性があります。より多くのコードをここに掲載するかもしれません(例えば、AJAX応答処理コード)。また、「実行中」と「完了済み」を返す/警告することで、正確に何を達成しようとしていますか?

関連する問題