1

私は次のコードを持っています:

$("#get_details").click(function(){ 
  name = $("#user_name").val();
  var age,gender;
  $.post("users.php", { name: name },
    function(data){
      if (data.status == 'success'){
        age = data.message[0];
        gender = data.message[1];
        alert(age); //getting output
      }
    }, "json");

   alert(age);//doesn't getting output
 });

これらの値に外部からアクセスしたいのですが$.post()、このために何を変更する必要がありますか?

4

3 に答える 3

1

まず、varはそれらをローカル スコープで定義します。それらがなければ、グローバル オブジェクト (または など)varからアクセスできます。windowwindow.agewindow.gender

しかし、2 番目のアラートは機能しません。これは、呼び出されたときに$.post非同期であるため、まだ完了していないためです。代わりにこれを行うことができます:

$("#get_details").click(function(){

    var name = $("#user_name").val();
    var age,gender;
    var json_ready = false;

    $.post("users.php", { name: name },function(data){
        json_ready = true;
        if (!data.status == 'success') return;

        age = data.message[0];
        gender = data.message[1];
    }, "json");

    var json_alert = function(){
        if(!json_ready)  return setTimeout(function(){ json_alert(); },1000);
        alert('gender: '+gender+', age: '+age);
    }

    json_alert();

});
于 2012-06-02T12:05:06.433 に答える
0

$ .post()は非同期であるため、ageの値を取得する前に2番目のalert()が呼び出されます。

それを機能させるには、同期投稿を可能にする$ .ajax()を使用する必要があります。

于 2012-06-02T12:09:44.057 に答える
0

年齢は$.postのコールバックで値を取得します。このコールバックの応答には時間がかかります。javascriptは$.postの応答を待たず、すぐにalert(age)を実行します。

于 2012-06-02T12:10:11.673 に答える