2009-08-04 9 views
39

私はAJAXの開発を行うためにプロトタイプを使用して、私はこのようなコードを使用しますAJAXの返信方法テキスト?

somefunction: function(){ 
    var result = ""; 
    myAjax = new Ajax.Request(postUrl, { 
     method: 'post', 
     postBody: postData, 
     contentType: 'application/x-www-form-urlencoded', 
     onComplete: function(transport){ 
      if (200 == transport.status) { 
       result = transport.responseText; 
      } 
     } 
    }); 
    return result; 
} 

をそして私は「結果は」空の文字列であることがわかります。だから、私はこの試みた:

somefunction: function(){ 
    var result = ""; 
    myAjax = new Ajax.Request(postUrl, { 
     method: 'post', 
     postBody: postData, 
     contentType: 'application/x-www-form-urlencoded', 
     onComplete: function(transport){ 
      if (200 == transport.status) { 
       result = transport.responseText; 
       return result; 
      } 
     } 
    }); 

} 

をしかし、それはまた、うまくいきませんでした。他のメソッドのresponseTextを取得するにはどうすればよいですか?

答えて

27

someFunctionの処理が完了してからonCompleteが長く呼び出されることに注意してください。あなたがする必要があるのは、ある関数にコールバック関数をパラメータとして渡すことです。プロセスは(すなわち、onCompleteの)作業を行った場合、この関数が呼び出されます。

somefunction: function(callback){ 
    var result = ""; 
    myAjax = new Ajax.Request(postUrl, { 
     method: 'post', 
     postBody: postData, 
     contentType: 'application/x-www-form-urlencoded', 
     onComplete: function(transport){ 
      if (200 == transport.status) { 
       result = transport.responseText; 
       callback(result); 
      } 
     } 
    }); 

} 
somefunction(function(result){ 
    alert(result); 
}); 
+0

あなたの答えは素晴らしい、より機能的な/ oopスタイル、そして本当に、本当に素晴らしい。しかし、誰かが答えたのは非同期です:falseはより簡単で、質問作成者が望むものが簡単になります(しかし、あなたのソリューションはより拡張性と柔軟性があります)。 –

+1

asynchronous:falseは、応答が受信されるまでブラウザを停止します。ネットワーク接続が遅いため、サーバーへの接続に数秒かかる場合は、ブラウザ全体が数秒間フリーズすることがあり、ユーザーの入力に応答しません。これは良いユーザビリティではありません。それはより簡単かもしれませんが、うまく動作しないため、**非同期:falseを決して使用しないでください**。 – Marius

+0

申し訳ありませんが、以前は非同期を実際に使用していませんでした。あなたは正しいので、基本的に 'function ajaxLoader(){var fAjaxLoaded = false; $。ajax(...、success:function {){fAjaxLoaded = true;})と同じです。 while(fAjaxLoaded); return ...} ' –

3

どのように「非同期:偽」を追加する方法についてあなたのコードに?私の場合、それはうまくいった:)

+0

これはAjaxの目的を破っていますか? –

+5

同期リクエストでは、リクエストが返るまで、ブラウザ内のすべてのJS実行がブロックされているので、これは悪いことです。 – finishingmove

+1

目的を破るが、あなたの日を節約する。 –

関連する問題