8

我得到以下代码:

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

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

但它不会停止提交表单。

请提供任何帮助。

4

6 回答 6

15

我假设你有类似的东西:

form.submit(function(event) {
    $.ajax(...);
});

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

form.submit(function(event) {
    event.preventDefault();
    $.ajax(...);
});
于 2009-04-30T00:55:53.777 回答
7

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

假设方法“check”返回一个响应,如果没有错误,则该响应为空,如果有错误,则其中包含错误。

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

$("#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();
});

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

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

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

于 2010-08-27T17:03:16.150 回答
2

您需要进行回调。

当我遇到这个确切的问题时,FAQ 中的这个条目帮助了我很多。

getUrlStatus('getStatus.php', function(status) {
    alert(status);
});

function getUrlStatus(url, callback) {
    $.ajax({
        url: url,
        complete: function(xhr) {
            callback(xhr.status);
        }
    });
}

原因是您不能在 AJAX 函数中返回。

由于异步编程的性质,上面的代码不能按预期工作。提供的成功处理程序不会立即调用,而是在将来某个时间从服务器接收到响应时调用。所以当我们在 $.ajax 调用之后立即使用 'status' 变量时,它的值仍然是未定义的。

于 2009-04-30T00:54:48.727 回答
1

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

于 2009-04-30T00:53:20.587 回答
1

您不能将此代码放在函数中或表单的 onsubmit 中,成功函数将其结果返回到 jQuery ajax 上下文,而不是表单提交上下文。

于 2009-04-30T00:55:51.873 回答
1

我也遇到了这个问题,但通过将输入 type="submit" 更改为 type="button" 然后只做你的 ajax 请求来解决它

   $("input#submitbutton")
    {
                          $.ajax(
                        {                         type: "POST",
                             async: false,              
                            url: "CheckIdExist",
                             data: param,
                            success: function(result) {
                                 if (result == true){
                                    //TODO: do you magic
                                 }                      
                                 else
                                  $("form").submit();           
                             },
                             error: function(error) {
                                alert(error);
                                return false;
                            }
                        });
    });
于 2009-08-12T09:49:22.033 回答