2016-06-11 5 views
0

申し訳ありませんが、私のタイトルが不明な場合は、どのように正確に質問/問題を形成するか分かりません。

HTML::

<button onclick="test()">test</button><br> 

のjavascript:

function test(){ 
    var text="Old text"; 
    $.post('test.php',function(data){ 
     text=data; 
    }); 
    alert(text); 
} 

PHP:

<?php 
    echo "New text"; 
?> 

が、警告ボックスで、私は "オールド・テキスト" を取得

だから、私はこのコードを持っています。 これを修正するにはどうすればよいですか?

+2

$ .post AJAXです。 AJAXは** Asynchronous ** JavaScript And XMLを意味します。あなたはこれを読む必要があります:http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call –

答えて

3

ポストコールバック関数内でアラートを移動してください。 $ .postがまだ実行されている間に警告が実行されます。

function test(){ 
    var text="Old text"; 
    $.post('test.php',function(data){ 
     text=data; 
     alert(text); 
    }); 

} 

更新:あなたは警告した後に実行するより多くのコードを持っている場合、あなたは新しい関数内でそれらのアクションをラップすることがあります。

function test(){ 
     var text="Old text"; 
     $.post('test.php',function(data){ 
      text=data; 
      moreActions(text); 
     }); 
    } 

    function moreActions(text){ 
    alert(text); 
    // and more actions to work with TEXT here 
    } 
+0

これはうまくいくかもしれませんが、alert-boxの後にテキスト変数を使って何らかのコードを実行した場合の別の解決法があるかどうかは疑問でした。 もちろん、他のコードも移動できますが、私は疑問に思っていました。 ありがとう! :) – Zvone

+0

OK。私はその目的のために答えを更新しました。 –

+1

あるいは '$ .post'約束を返し、約束のコールバックに必要なことをします – charlietfl

-2

$。post()は非同期関数なので、post()リクエストからデータを取得する前にalert()が実行されています。同期するにはjquery.deferred()を使用してください。

+0

これはかなり悪いアドバイスです。解決策は、同期実行を強制するのではなく、JavaScriptを学習することです。 –

+0

私はOPが同期して動作したいとは思わないが、それはJavaScriptのこの基本的なプロパティの誤解を維持するだけである。 – samsonthehero

+0

また、 'jQuery.deferred'は何らかの形で同時性を伴わない。コールバックを書くのはちょっと面白い方法です。 –

関連する問題