使用jquery提交表单值有效,但成功后无法提交标准html表单

使用jquery提交表单值有效,但成功后无法提交标准html表单,jquery,Jquery,我首先想在数据库中发布一些用于插入的ajax数据,这很好,但是标准html表单的提交失败,原因是:$(“#foo”).submit(); 控制台消息循环无限:-/ <script type="text/javascript"> // variable to hold request var request; // bind to the submit event of our form $("#foo").submit(function(event){ // abort

我首先想在数据库中发布一些用于插入的ajax数据,这很好,但是标准html表单的提交失败,原因是:$(“#foo”).submit(); 控制台消息循环无限:-/

<script type="text/javascript"> 
// variable to hold request var request; 
// bind to the submit event of our form $("#foo").submit(function(event){
    // abort any pending request
    if (request) {
        request.abort();
    }
    // setup some local variables
    var $form = $(this);
    // let's select and cache all the fields
    var $inputs = $form.find("input, select, button, textarea, text, hidden");
    // serialize the data in the form
    var serializedData = $form.serialize();

    // let's disable the inputs for the duration of the ajax request
    $inputs.prop("disabled", true);

    // fire off the request to /form.php
    request = $.ajax({
        url: "/insert_payment_data.php",
        type: "post",
        data: serializedData
    });

    // callback handler that will be called on success
    request.done(function (response, textStatus, jqXHR){
        // log a message to the console         
    console.log("Hooray, it worked!");
    $("#foo").submit();
});

    // callback handler that will be called on failure
    request.fail(function (jqXHR, textStatus, errorThrown){
        // log the error to the console
        console.error(
            "The following error occured: "+
            textStatus, errorThrown
        );
    });

    // callback handler that will be called regardless
    // if the request failed or succeeded
    request.always(function () {
        // reenable the inputs
        $inputs.prop("disabled", false);
    });

    // prevent default posting of form
    event.preventDefault(); });

</script>

//变量来保存请求var请求;
//绑定到表单$(“#foo”)的提交事件。提交(函数(事件){
//中止任何挂起的请求
如果(请求){
request.abort();
}
//设置一些局部变量
var$form=$(此);
//让我们选择并缓存所有字段
var$inputs=$form.find(“输入,选择,按钮,文本区域,文本,隐藏”);
//序列化表单中的数据
var serializedData=$form.serialize();
//让我们在ajax请求期间禁用输入
$inputs.prop(“禁用”,真);
//向/form.php发出请求
请求=$.ajax({
url:“/insert\u payment\u data.php”,
类型:“post”,
数据:序列化数据
});
//成功时将调用的回调处理程序
完成(函数(响应、文本状态、jqXHR){
//将消息记录到控制台
log(“万岁,成功了!”);
$(“#foo”).submit();
});
//失败时将调用的回调处理程序
失败(函数(jqXHR、textStatus、errorshown){
//将错误记录到控制台
控制台错误(
“发生了以下错误:”+
文本状态,错误抛出
);
});
//将被调用的回调处理程序
//如果请求失败或成功
request.always(函数(){
//重新启用输入
$inputs.prop(“禁用”,false);
});
//防止表单的默认过帐
event.preventDefault();});
这让我抓狂:-(

这很正常:

$("#foo").submit();
请求.done
方法末尾的这一行触发了表单的提交,这可能触发了AJAX请求,这将触发
请求.done
…以此类推:-)


我要做的(尝试)是删除该行,并删除
事件.preventDefault()位于底部的语句,这样在完成AJAX请求后,您的提交将像往常一样运行。

是的,如果您已经发布表单,您不需要提交#foo,但是如果您想发布其他信息,然后不要
返回false
,这样你就可以完成Ajax的工作,然后像往常一样发布表单。另一个请求是到另一个域,这就是为什么我要使用通常的过程。据我所知,向其他域发送AJAX请求是不可能的。我如何打破这种循环?确实这是一个很好的理由:-)请看我更新的答案,我认为它会解决问题。这很有帮助,现在AJAX请求被发送并提交表单,但常规表单的表单值不是:-/我不明白你所说的“表单已提交”是什么意思,那么“常规表单的值不是”?