2016-07-15 3 views
1

私は、スクリプトを次のようしている:jQuery Ajaxを実行すると、なぜですか?

{1}=9 
{1}=9 
{2}0 
{2}0 

ありがとう:結果は、なぜ、なぜ、私

{2}0 
{2}0 
{1}=9 
{1}=9 

なぜされていないために説明してください知っている

var price_option_oc = 0; 
// Example 
jQuery.ajax({ 
    type: "POST", 
    processData: false, 
    dataType: "text", 
    url: mainURL + url_ajax_get_prices_oc, 
    data: JSON.stringify(datas), 
    contentType: "application/json; charset=utf-8", 
}).done(function(data) { 
    console.log('{1}=' + data); 
    price_option_oc = data; 
}); 

console.log('{2}' + price_option_oc); 

いけません。

+0

非同期呼び出しを行っているためです。 'async:false'を設定するだけで、あなたの期待通りに動作します。しかし、これはこの問題を処理する悪い方法です。 –

+1

ajaxリクエストは非同期ですが、要求が実行されている間は 'console.log( '{2}' + price_option_oc)'が実行され、リクエストが完了するとコールバックが呼び出されます – WalksAway

+0

ありがとう、 async:私のコードには本当ですか? – phinq

答えて

0

Ajaxリクエストは、残りのコードと非同期で実行されます。つまり、それらは並行して実行されます。

AJAX呼び出しがネットワーク速度などの外部要因に依存するため、ので、だから、私は「非常に高い」と言うAJAX呼び出しがconsole.log('{1}='+data);

を完了し、実行する前に

console.log('{2}'+price_option_oc); 

が実行されている可能性が非常に高いですし、リモートサーバーの応答速度は、その実行速度を保証することはできませんので、物事が実行される順序を保証することはできません。

コードの実行が必要な場合は、 ajax呼び出し、そのコードを.done関数(またはそこから呼び出される関数)に入れる必要があります。

P.S.私はこのタイプの問題を解決するためにasync:falseを使用しません。これにより、ブラウザはajax呼び出しが完了するまで(または失敗するまで)、ユーザー入力に応答しなくなります。通話に通常よりも時間がかかる場合、ブラウザにクラッシュしたように見えます。これはユーザーフレンドリーではありません。ほとんどのコーダーはこの理由からこの機能を使用しません。

+0

ありがとう、私は読んで "非同期呼び出しからの応答を返すにはどうしたらいいですか? - Andreas 2分前"。 OKです – phinq

+0

ajax({})にasync:falseを設定してみてください。 –

+0

@DavinderKumar 'async:false'が悪い理由について(あなたのコメントのすぐ上に)私のセクションを読んできましたか?この質問は、http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-callの複製とみなされているという回答は、長くてより良い説明なぜ、 'async:false'はほとんどいつもひどい考えです – ADyson

関連する問題