2012-03-08 27 views
1

この質問は、私がここで質問した質問に関連している可能性があります。Jquery ajax request with async:true does not return valueAjaxリクエストからコールバック関数の値を取得する方法

今、別の問題に直面しています。どのように私はコールバック関数から値を取得するのですか?

function find_bus_route(array_bustops,callback){ 

      $.ajax({ 

      type: 'POST', 
       async: true, 
      url: 'find_routenum.php', 

      data:{ 

       array_bustops:JSON.stringify(array_bustops) 

      }, 
      dataType:'json', //html,xml 

      success: function(my_results){ 

       callback(my_results); 

      }, 

      error:function(x,e){ 
       if(x.status==0){ 
       alert('You are offline!!\n Please Check Your Network.'); 
       }else if(x.status==404){ 
       alert('Requested URL not found.'); 
       } 
      } 


     }); 

    }//end function 

var arr_one; 

    find_bus_route(arr_bus,function (data){ 
                       arr_one=data; 
      alert(arr_one) //has correct value   

    } 

alert (arr_one) //-->This returns undefined.. 

arr_oneが有効範囲外のようです。

if(arr_one == arr_two){ 
    //do something. 

} 

は実際に私が何をしようとしているこれです: はfalseに設定され、関数find_bus_routeが値を返すコールバックと非同期がないと仮定します。

var arr_one=find_bus_route(arr_stop1); 
var arr_two=find_bus_route(arr_stop2); 

if(arr_one==arr_two){ 
//do something 

} 
else { 
//do something 


}; 

答えて

1

外部ページを非同期的に呼び出すため、すぐに結果が得られません(サーバー/ネットワーク負荷によって異なります)。

コードでは、AJAX呼び出しの直後に2番目の警告(undefinedを表示)が実行されます(応答が得られない可能性があります)。もう1つは、JSONレスポンスが取得されたときに実行されます。戻り値はsuccessコールバックでのみ使用できます。

あなたは何をしようとしているのか正確に説明してください。

EDIT: 私は何が必要だと思うが、オブジェクトと呼ば延期され、thisを参照してください。 jQuery.when()では、2つの非同期呼び出しを待つことができます。最初の例はまさにあなたが求めるものです。 では、コールバックの場合、2つの結果を比較します。

+0

私の質問の+コードを編集しました –

+0

私の答えは今編集されています:) –

2

最初にajaxの "A"は非同期です。あなたの「もし」の火事が発生した時、アヤックスは完了していません。あなたはあなたの成功のコールバックに移動する必要があります

関連する問題