使用jQuery拦截表单提交

时间:2013-02-14 18:46:44

标签: javascript jquery

我想通过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()用于其他目的以及它的预期效果,所以我很确定错误是在提交例程中的某个地方。但我不知道它有什么问题。

2 个答案:

答案 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!");
   });
});