8

AJAX を使用して、フォームの値が受け入れられるかどうかを判断したいと考えています (これはフォームの検証ではありません)。AJAXresultは、フォームが送信されたかどうかを判断します。

以下では、フォームが送信されたときに AJAX 呼び出しを実行し、返される内容 (許容される空白、または許容されないエラー メッセージ) に応じてreturn true;、.return false;$("form").submit

私の問題は AJAX にあると思われますsuccess:resultのようなことができるように、AJAX 呼び出しから抜け出すのを手伝ってくださいif (result == "") { return true; } else { return false; }

働く:

$("form").submit(function(e) {
    e.preventDefault();
    var form = this;
    var tray = $('select[name=tray_id]').val();
    $.ajax({
        type: "POST",
        url: "modules/reserve-check.php",
        data: {tray_id: tray},
        cache: false
    }).done(function(result) {
        if (result == "")
            form.submit();
        else
            alert(result);
    }).fail(function() {
        alert('ERROR');
    });
});

オリジナル:

$("form").submit(function() {
    var tray = $('select[name=tray_id]').val();
    $.ajax({
        type: "POST",
        url: "modules/reserve-check.php",
        data: {tray_id: tray},
        cache: false,
        success: function(result) {
                alert(result);
        },
        error: function(result) {
            alert(result); //This works as expected (blank if acceptable and error msg if not acceptable)
        }
    });

    /*
    if (result == "")
        return true; 
    else
        return false; 
    */
    return false; //this is here for debugging, just to stop the form submission
});
4

2 に答える 2

22

ajax 呼び出しは非同期であるため、フォームが送信されないようにする必要があります。結果が返されたら、それが条件に一致するかどうかを確認し、ネイティブの送信ハンドラーを使用してフォームを送信preventDefault()し、jQuery イベント ハンドラーで を回避します。

$("form").submit(function(e) {
    e.preventDefault();

    var self = this,
        tray = $('select[name=tray_id]').val();

    $.ajax({
        type: "POST",
        url: "modules/reserve-check.php",
        data: {tray_id: tray},
        cache: false
    }).done(function(result) {
        if (result == "") self.submit();
    }).fail(function() {
        alert('error');
    });
});
于 2013-06-13T21:32:47.417 に答える
3

を使用e.preventDefault();してフォームが送信されないようにし、this.submit()(jQuery.submit()トリガー関数を呼び出すのではなく、ネイティブ<form> .submit()関数を呼び出す) を使用してフォームを送信します。

$("form").submit(function(e) {
            e.preventDefault();
            var tray = $('select[name=tray_id]').val();
            var form = this;
            $.ajax({
                type: "POST",
                url: "modules/reserve-check.php",
                data: {tray_id: tray},
                cache: false,
                complete : function(result){callback(result, form)}
            });       
        });

var callback = function(result, form){
  if(!result)
    form.submit();
};
于 2013-06-13T21:23:57.767 に答える