10

我更改了 php 和 jQuery 的编码风格,但我的注册

$("#reg_form_company").bind("submit", function() {
    $.fancybox.showActivity();
    $.ajax({
            type     : "POST",
            cache    : false,
            url      : $(this).attr('action'),
            data     : $(this).serializeArray(),
            success  : function(data) {
                $(".printArea").empty().append(data).css('visibility','visible');
            }
    });
    return false;
});

那么这是我的表格

<form id="reg_form_company" action="index.php?module=register&actionregister" method="post" >
      <input>[...]</input>
</form>

然后单击“提交”按钮后,它不起作用,我认为有人可以帮助我解决这个问题,因为 $.ajax 可能会混淆 POST(用于输入)和 GET(用于“行动”形式)

感谢您的帮助,如果需要,您还可以修改整个 jQuery 代码。

抱歉大家不包括#reg_form_company 和fancybox

4

5 回答 5

32

你需要做这样的事情:http: //jsfiddle.net/xSJTs/2/

$('form').on('submit',function(e){
    e.preventDefault();
    $.ajax({
        type     : "POST",
        cache    : false,
        url      : $(this).attr('action'),
        data     : $(this).serialize(),
        success  : function(data) {
            $(".printArea").empty().append(data).css('visibility','visible');
        }
    });

});

您必须使用serialize()而不是serializeArray(). serializeArray()创建一个 JavaScript 对象,serialize()创建一个查询字符串。

序列化: http: //api.jquery.com/serialize/

序列化数组:http: //api.jquery.com/serializeArray/

基本上你等到表单提交然后你中断它(e.preventDefault();)。

于 2012-04-06T09:27:50.890 回答
4

您必须拦截表单的单击/提交事件并参考如下所示的表单:

 $("#myForm").submit(function(){
    var $form = $(this);

    $.ajax({
     type     : "POST",
     cache    : false,
     url      : $form.attr('action'),
     data     : $form.serializeArray(),
     success  : function(data) {
         $(".printArea").empty().append(data).css('visibility','visible');
     }
    });
 })

并在您的表单中添加一个 id,例如:

<form id="myForm" action="index.php?module=register&actionregister" method="post" >
      <input>[...]</input>
</form>
于 2012-04-06T09:22:26.087 回答
2

文件输入工作ajax

嗨,
其他答案对我不起作用,因为我需要传递文件输入并且这些不能“序列化”。

好的方法是通过它FormData并禁用它processData

$('form').on('submit', function(e) {
    e.preventDefault();

    var formData = new FormData(this);

    $.ajax({
        type       : "POST",
        cache      : false,
        url        : $(this).attr('action'),
        data       : formData,
        success    : (data) => console.log('Data returned from server => ', data),
        contentType: false,
        processData: false
    })
})
于 2018-05-14T10:15:41.077 回答
1

您必须参考您的表格而不是$(this)

给你的表格一个 id 或 class ex :

<form action="index.php?module=register&actionregister" method="post" id="MyForm">
      <input>[...]</input>
</form>

在 JQuery 中:

$.ajax({
        type     : "POST",
        cache    : false,
        url      : $('#MyForm').attr('action'),
        data     : $('#MyForm').serializeArray(),
        success  : function(data) {
            $(".printArea").empty().append(data).css('visibility','visible');
        }
});
于 2012-04-06T09:26:22.603 回答
0
    //This is still showing the cgi output of my script in the browser
 $('#myForm').submit(function()){
                 $('#myForm').preventDefault();
        $.ajax({
            type     : "POST",
            cache    : false,
            url      : $('#myForm').attr('action'),
            data     : $('#myForm').serialize(),
            success  : function(data) {
                $(".printArea").empty().append(data).css('visibility','visible');
            };

    <form id = "myForm" action="cgi-bin/matt/matt-test.cgi?module=register&actionregister" method ="post">
于 2013-05-08T19:33:17.700 回答