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

我得到以下代码:

$.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,则表单需要停止提交。

但它不会停止提交表格。

请帮忙。

我假设你有类似的东西:

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

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

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

这个问题的一个细微变化是:我想使用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(); }); 

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

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

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

你需要做一个回调。

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

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

原因是你无法返回AJAX函数。

由于异步编程的性质,上面的代码无法正常工作。 提供的成功处理程序不会立即调用,而是在将来从服务器收到响应时的某个时间调用。 因此,当我们在$ .ajax调用之后立即使用’status’变量时,其值仍未定义。

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

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

我也有这个问题,但是通过将输入类型=“提交”更改为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; } }); });