2017-08-02 6 views
0

私はajaxを通してデータをフェッチして何かをする例があります。この機能は再使用可能な状態です。どこでも電話できます。ajaxの同期処理ですか?

<script type="text/javascript"> 

    function getData(value1,value2){ 

     $.ajax({ 
      url: URL, 
      data:{ 
       email:value1, 
       age:value2 
      }, 
      async:false, 
      dataType: "json", 
      type: "get", 
      success: function(data){ 

       var result; 

       result = data.result; 

       console.log("result:"+result); 
      }, 
      error: function(){ 
      } 
     }); 
    }; 

    var data; 

    data = getData("email","age"); 

    console.log("data:"+data); 
</script> 

私がajaxを呼び出すと、結果は後でデータが空になります。私はasync falseを使用しますが、ajaxではOKです。

どのようにするかjavascriptは応答を待ち、それ以上実行しないで、応答を取得してから実行を続行します。時間切れの設定は、異なるサーバーやサーバーで異なるクライアントにサーバーの応答速度に関する問題を引き起こすため、良い考えではありません。

+1

SyncrhonousのXMLHttpRequestがあるため、エンドユーザの経験*への有害な影響のメインスレッドで推奨されていません* - というよりも、非同期コードから逃げ出し、それを使用する方法を学んでください。注:あなたのコードでは、 'getData'は何も返さないので、' data'が未定義です –

+0

'getData'の先頭に' var result; 'を移動します。 result; ' –

+0

**非同期**リクエストを含む回答が必要な場合 - https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-callを参照してください。 - それは最初に非同期要求を試みたように見えますが、非同期で作業することができなかったので同期に頼っていました –

答えて

1

あなたは、例えば、AJAX

コールバックを使用することができます。

function getData(value1,value2, callback){ 

     $.ajax({ 
      url: URL, 
      data:{ 
       email:value1, 
       age:value2 
      }, 
      dataType: "json", 
      type: "get", 
      success: function(data){ 

       var result; 

       result = data.result; 
    callback(result) 
       console.log("result:"+result); 
      }, 
      error: function(){ 
      } 
     }); 
    }; 

    var data; 

    data = getData("email","age", function(result){ 
    console.log("data:"+data); 
}); 
+0

、なぜ同期要求を使用するのですか? –

+0

asyncをfalseに設定すると、関数内の次のステートメントを呼び出す前に、呼び出すステートメントが完了しなければならないことを意味します。 async:trueを設定すると、そのステートメントは実行を開始し、asyncステートメントがまだ完了しているかどうかに関係なく、次のステートメントが呼び出されます。 –

+0

私はasynchがどのように動作するかを理解しています。コールバックを使用するだけで、asynchのルート全体を渡すこともできます。 P.S. 'data'はあなたのコードで未定義です** –

0

あなたがこの試すことができます:

function getData() { 
    $.ajax({ 
     url: URL, 
     ... 
     ... 
     type: 'GET', 
     success : resultData 
    }) 
} 

var resultData = function (data) { 
    console.log(data); 
    // This will be called whenever the data is available 
    // So you execute what ever you want to, once data is available 
    // initiate function that is dependent on that data .... 
} 

getData(); 

注: 偽:それはAjaxの非同期を作るために良いアイデアを実行していないし、その絶対のを待つために、すべて次の コードを行いますので、async: falseを使用することはありませんが、コールバック関数メソッドを試してください。それはあなたに同じ結果を与えるだろう 、ajax非同期を作ることなく:false、それを行うためのより良い方法です。

関連する問題