0

jqueryを使用してAJAX関数を書き始めたところです。ここで私は電話してmyfunction()います。check.php が返される場所、{"count":1}または{"count":0}myfunction が常に返される場所retval=false。しかし、{"count":1}それはtrueを返すはずです。どこが間違っているのかわかりません。以下は私が使用しているコードです。

function myfunction(){
var retval=false;
if($('#tag').val() != ''){
    var query=$( "#tag" ).val();
    $.getJSON("check.php",{
        q: query
    },function(data){
        if(data.count==0){
            $('#formerrormsg').html('Error msg');
        }
        else{
            retval=true;
        }
    });
}
return retval;
}

これを理解するのを手伝ってください。

4

2 に答える 2

2

それは、$.getJSON(..)非同期だからです。function(data){...}以下は、渡す 3 番目のパラメーター ( )について jQuery doc が述べていることです。

success(data, textStatus, jqXHR) :リクエストが成功した場合に実行されるコールバック関数。

trueに設定された関数retvalは、AJAX 呼び出しが成功したときに実行されます。あなたが電話するときではなくmyfunction()

これを回避するには、次の 2 つの方法があります。

  • AJAX 呼び出しを同期させます。応答が受信されるまで関数は戻りません。(良い考えではありません。UI がフリーズする可能性があります)
  • コードを変更します -- 非同期の方法です。通常、3 番目のパラメーターとして定義された「成功関数」内から関数 (理想的には戻り値に依存する) を呼び出します。
于 2012-12-08T17:21:01.297 に答える
0

これは AJAX (非同期) リクエストであるためreturn retval;、AJAX 成功関数が実行される前に返されるため、常に false が返されます。を返して使用する前に、そのリクエストを待機するように実装を変更する必要がありますretval

于 2012-12-08T17:20:18.953 に答える