2

我想$.ajax在表单上触发,onsubmit并且return true只有在 Ajax 返回之后才有效。

例如:

<form id="myForm" onsubmit="return ajaxValidation();">
    <input id="myString" name="myString" type="text" />
    <input type="submit" value="Submit" />
</form>

在 Javascript 中:

function ajaxValidation() {
    $.ajax({
        async: false,
        type: "POST",
        url: "ajax.php",
        data: { myString: $("#myString").val() }
    }).success(function( response ) {
        alert(response); //Got 'ok'
        if (response=="ok") {
            return true; //mark-1
        } else {
            alert("Oh, string is wrong. Form Submit is cancelled.");
        }
    });
    return false; //mark-2
}

当我提交时,我得到了警报ok,但它返回了“假”,因为它跳到了最后return false一行。

为什么?我无法理解。实际上,它应该打到return true线。(而且,即使在 之后return true,该功能也应该停在那里并从中出来)

所以它现在的意思是,does NOT waitAjax 返回的父函数。相反,它不断地运行到最后。知道为什么,请。如何让父函数等待Ajax?

4

2 回答 2

4

由于 AJAX 是异步的,因此在提交按钮上使用单击处理程序会更好地进行验证。

以下是基于删除内联onSubmit

$(function() {

    var $form = $('#myForm');

    $form.find('input[type="submit"]').click(function() {
        $.ajax({
           /* async: false,  this is deprecated*/
            type: "POST",
            url: "ajax.php",
            data: {
                myString: $("#myString").val()
            }
        }).success(function(response) {
            alert(response); //Got 'ok'
            if(response == "ok") {
             /*  submit the form*/
                $form.submit();
            } else {
                alert("Oh, string is wrong. Form Submit is cancelled.");
            }
        }); /* prevent default when submit button clicked*/
        return false;

    });
});
于 2013-01-26T21:59:16.500 回答
0

标记 1 处的返回值是针对您的 ajax 请求的成功功能,而不是针对您的验证功能。因此,即使它返回,它也只从那里返回,而不是从标记 2 的验证函数返回

于 2013-01-26T20:38:42.257 回答