我想通过jQuery拦截提交,并首先检查服务器上是否存在文件。如果它存在继续请求,如果不显示消息并且不发送请求。这就是我所拥有的:
$("#methodForm").submit(function(e){
checkIndex('upload/segments.gen').done(function() {
return true;
}).fail(function () {
e.preventDefault();
alert("No index present!");
return false;
});
});
这是checkIndex()
:
function checkIndex(file){
return $.ajax({
url : file,
type:'HEAD'
});
}
这是:文件存在于服务器上,但checkIndex
返回失败。首先,我看到警报弹出,然后继续并将发布请求发送到服务器。
我将checkIndex()
用于其他目的以及它的预期效果,所以我很确定错误是在提交例程中的某个地方。但我不知道它有什么问题。
答案 0 :(得分:55)
您无法退回到异步方法(例如ajax)的回调。相反,阻止一起提交,然后在准备好时提交。
$("#methodForm").submit(function(e){
e.preventDefault();
var form = this;
checkIndex('upload/segments.gen').done(function() {
form.submit(); // submit bypassing the jQuery bound event
}).fail(function () {
alert("No index present!");
});
});
答案 1 :(得分:2)
它确实不是那样工作,checkIndex是异步的,所以当它返回任何东西时,表单被提交,并且返回语句也在不同的范围内,尝试更像这样的东西:
$("#methodForm").submit(function(e){
e.preventDefault(); //prevent submit
var self = this;
checkIndex('upload/segments.gen').done(function() {
self.submit(); //submit if ajax OK
}).fail(function () {
alert("No index present!");
});
});