0

クエリ ajax を使用しようとすると、「false を返す」とコールバックも取得されます

$(document).ready(function(){

    $("form#Form").submit(function(){
        $.ajax({
            url: "ajax.php",
            type: "POST", 
            data: $(this).serialize(), 
            success: function(callback){ 
                alert(callback);            
            } //success
        }); //ajax

        return false;

    }); //submit
}); //ready

PHPファイルでは、「デニス」をエコーするだけで機能し、コンテンツ「デニス」でアラートが表示されます。私がこのようなことをしようとすると:

$(document).ready(function(){

    $("form#Form").submit(function(){
        $.ajax({
            url: "ajax.php",
            type: "POST", 
            data: $(this).serialize(), 
            success: function(callback){ 
                alert(callback);            
            } //success
        }); //ajax

    if (callback == "dennis"){
        return false;
    }else{
        return true;
    }   

    }); //submit
}); //ready

私は空のアラートを受け取り、フォームは彼が「真を返す」ように振る舞います。私も変数を入れて彼を返そうとしましたが、それでも同じ問題..

なぜそれが起こったのですか?どのように修正しますか?

4

2 に答える 2

0

あなたの質問に対する私の最初のコメントを参照してください。それが機能しない理由です。

次のようなこともできますが、お勧めしません。

var foo = null;

$.ajax({
    url: '/',
    method: 'POST',
    async: false,
    success: function(result) {
        foo = result;
    }
});

// use foo
于 2013-03-01T10:44:15.543 に答える
0

これは、ajax-scope が非同期で実行されるためです。したがって、チェックするif (callback == "dennis")と、ajax 呼び出しまだ php に到達していない可能性があるため、コールバックはundefinedになります。

成功スコープで確認する必要がありますcallback(コールバックではなく、ajax 呼び出しの結果であるため、実際には不適切な変数名です)。

$.ajax({
    url: "ajax.php",
    type: "POST", 
    data: $(this).serialize(), 
    success: function(callback){ 
       alert(callback);
       if (callback == 'dennis') {
           return true;
       } else return false;
    } //success
}); //ajax

さて、次の問題は、フォームがおそらくすでに true を返していることです。したがって、ここで true|false を返すよりも、結果で新しい関数を呼び出す方がよいでしょう。

 // ajax metod success function
    success: function(result){ 
       alert(callback);
       onFormReturn(result);
    } //success

結果を処理する関数を定義します

// elsewhere, outside ajax-scope - even outside document.ready
function onFormReturn(result) {
   if (result == "dennis") {
      // do your stuff
   } else {
      // do something else
   }
}
于 2013-03-01T11:44:24.290 に答える