提交表单不会停止在jquery ajax调用中

Ray*_*Ray 8 forms jquery submit

我得到以下代码:

$.ajax({
    type: "POST",
    async: false,              
    url: "CheckIdExist",
    data: param,
    success: function(result) {
        if (result == true){
            return false;
        }                                 
    },
    error: function(error) {
        alert(error);
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

如果ajax返回值为true,则表单需要停止提交.

但它并没有停止提交表格.

请帮忙.

小智 15

我假设你有类似的东西:

form.submit(function(event) {
    $.ajax(...);
});
Run Code Online (Sandbox Code Playgroud)

您希望return false(或调用event.preventDefault())事件处理函数本身,而不是在AJAX调用中,例如:

form.submit(function(event) {
    event.preventDefault();
    $.ajax(...);
});
Run Code Online (Sandbox Code Playgroud)

  • 非常好 - 使用event.preventDefault()解决了我的问题,并在用户单击表单上的按钮时阻止了页面刷新.谢谢DarkWulf! (2认同)

Jim*_*nny 7

这个问题的一个细微变化是:我想使用jquery和ajax向用户显示错误消息,但是如果没有错误则执行正常处理.

假设方法"check"返回一个如果没有错误则为空的响应,并且如果有错误则包含错误.

然后你可以在准备好的函数中做这样的事情:

$("#theform").submit(function() {
    var data = { ... }
    $.get('/check', data,
        function(resp) {
            if (resp.length > 0) {
                $("#error").html(resp);
            } else {
                $("#theform").unbind('submit');
                $("#theform").submit();
            }
    });
    event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

那么它是怎样工作的?当触发外部提交函数时,它会构建AJAX调用所需的数据(这里是更高级别的函数get).调度被调度,主操作线程立即继续,但是无条件地停止提交,因此没有明显的事情发生.

一些时间过去了,AJAX调用返回请求的结果.如果非空,则向用户显示结果.

但是,如果响应为空,则提交功能未绑定.这可以防止ssytem通过外部提交功能进行额外调用.调用内部提交函数.这会触发实际表单提交到表单的目标,并且生活会按预期进行.


Vol*_*erK 1

在这种情况下,您需要执行同步 http 请求,即您必须将async 选项设置为 false。
在您的版本中,httpxmlrequest 是异步的。它可能会在 onsubmit 处理程序返回很久之后完成,并且 onsuccess 回调是在 onsubmit 处理程序的上下文之外调用的。
“return false”将是匿名函数 function(result) {... } 的返回值,而不是 onsubmit 处理程序的返回值。