2009-08-07 17 views
0

PrototypeライブラリでAjaxを使用しています。プロトタイプのonSuccess関数内で値にアクセスする

ここに、Ajax関数を呼び出す関数があります。

function Testfn() 
{ 

    var DateExists = ''; 

    new Ajax.Request('testurl',{ 
      method: 'post', 
      parameters: {param1:"A", param2:"B", param3:"C"}, 
      onSuccess: function(response){ 
      //DateExists = response.responseText; 
          DateExists = 1; 
     } 
     }); 
    // I want to access the value set in the onsuccess function here 
    alert(DateExists); 

} 

私はNULL値の代わりに、可能であることをどのように1である私のAjax呼び出しのONSUCCESS機能で設定された値を取得していますDateExists値を警告?

ありがとうございました。

答えて

1

するonSuccessコールバックは、 JAX要求が終了したときに、非同期で実行されるので、アラートはコールバックが呼び出され前に発射されます。

あなたが別の関数を作る、あなたの応答と、コールバックの内側またはしたい場合は動作するはずです:

new Ajax.Request('testurl',{ 
      method: 'post', 
      parameters: {param1:"A", param2:"B", param3:"C"}, 
      onSuccess: function(response){ 
         var dateExists = response.responseText; 
         doWork(dateExists); 
         // or alert(dateExists); 
       } 
     }); 

function doWork (data) { 
    alert(data); 
} 
3

AJAXでのAは、非同期の略です。つまり、new Ajax.Requestを使用してAjaxリクエストを送信すると、リクエストがサーバーに送信され、すぐにスクリプトに制御が返されます。したがって、alert(DateExists)には、最初に設定した「」が表示されます。

AJAXリクエストから返されたDateExistsの値を確認するには、onSuccess()メソッド内でDateExistsを移動する必要があります。

例:

function Testfn() { 

    var DateExists = ''; 

    new Ajax.Request('testurl', { 
     method: 'post', 
     parameters: {param1:"A", param2:"B", param3:"C"}, 
     onSuccess: function(response){ 
     DateExists = response.responseText; 
     alert(DateExists); 
     } 
    }); 
} 
0

CMSは正確に正しいです。

function Testfn() 
{ 

    var DateExists = ''; 

    new Ajax.Request('testurl',{ 
    method: 'post', 
    parameters: {param1:"A", param2:"B", param3:"C"}, 
    onSuccess: function(response){ 
     //DateExists = response.responseText; 
     DateExists = 1; 
     doTheRestOfMyStuff(DateExists); 
    } 
    }); 
    // I want to access the value set in the onsuccess function here 
    function doTheRestOfMyStuff(DateExists) 
    { 
    alert(DateExists); 
    } 
} 
+0

正直な質問:私はすぐに質問に応えたが、不完全な私の答えを残し、その後に数分を過ごす場合解決策は、このように、AJAXコールバック内からDateExistsへのアクセスを必要とJavaScriptを呼び出すことです私の答えを編集して元に戻ってきますが、元の投稿日に回答されたと表示されますか?この質問では、私は上記の2つの答えの前にこのjsの例を掲載しましたが、今はコピーしたように見えます。 – stereoscott

+0

元の応答の時刻が表示されます。 – hobodave

関連する問題