使用 jQuery 和 PHP 序列化和提交表单

Posted

技术标签:

【中文标题】使用 jQuery 和 PHP 序列化和提交表单【英文标题】:Serializing and submitting a form with jQuery and PHP 【发布时间】:2013-02-16 21:53:49 【问题描述】:

我正在尝试使用 jQuery 发送表单的数据。但是,数据不会到达服务器。你能告诉我我做错了什么吗?

我的 html 表单:

<form id="contactForm" name="contactForm" method="post">
    <input type="text" name="nume" size="40" placeholder="Nume">
    <input type="text" name="telefon" size="40" placeholder="Telefon">
    <input type="text" name="email" size="40" placeholder="Email">
    <textarea name="comentarii" cols="36" rows="5" placeholder="Message"></textarea> 
    <input id="submitBtn" type="submit" name="submit" value="Trimite">
</form>

javascript(与上述形式在同一个文件中):

<script type="text/javascript">
    $(document).ready(function(e) 

        $("#contactForm").submit(function() 
            $.post("getcontact.php", $("#contactForm").serialize())
            // Serialization looks good: name=textInNameInput&&telefon=textInPhoneInput etc
            .done(function(data) 
                if (data.trim().length > 0) 
                    $("#sent").text("Error");   
                 else 
                    $("#sent").text("Success");
                
            );

            return false;
        )
    );
</script>

服务器端 PHP (/getcontact.php):

$nume = $_REQUEST["nume"]; // $nume contains no data. Also tried $_POST
$email = $_REQUEST["email"];
$telefon = $_REQUEST["telefon"];
$comentarii = $_REQUEST["comentarii"];

你能告诉我我做错了什么吗?


更新

检查了var_dump($_POST),它返回了一个空数组。

奇怪的是,在我的本地机器上测试的相同代码运行良好。 如果我将文件上传到我的托管空间,它就会停止工作。我尝试在不使用 jQuery 的情况下做一个老式的表单,并且所有数据都是正确的。

我不明白这会是一个服务器配置问题。有什么想法吗?

谢谢!

【问题讨论】:

您的表单提交了吗?还是只是调用ajax函数? @zamil 它已提交/我可以将数据从服务器端返回到 jquery。 @Dan_Dinu:我发布了一个我通常用于 ajax 调用的代码。如果你愿意,你可以使用它 您有托管空间的网络链接吗? 【参考方案1】:

你可以使用这个功能

var datastring = $("#contactForm").serialize();
$.ajax(
    type: "POST",
    url: "your url.php",
    data: datastring,
    dataType: "json",
    success: function(data) 
        //var obj = jQuery.parseJSON(data); if the dataType is not specified as json uncomment this
        // do what ever you want with the server response
    ,
    error: function() 
        alert('error handling here');
    
);

返回类型为json

编辑:我使用event.preventDefault 来防止浏览器在这种情况下被提交。

为答案添加更多数据。

dataType: "jsonp"如果是跨域调用。

beforeSend: //这是一个预请求回调函数

complete: // 请求结束后调用的函数,所以无论成功或错误都必须执行的代码可以放在这里

async: // 默认情况下,所有请求都是异步发送的

cache: // 默认为 true。如果设置为 false,它将强制浏览器不缓存请求的页面。

找到官方页面here

【讨论】:

【参考方案2】:

您可以使用表单数据添加额外的数据

使用 serializeArray 并添加附加数据:

var data = $('#myForm').serializeArray();
    data.push(name: 'tienn2t', value: 'love');
    $.ajax(
      type: "POST",
      url: "your url.php",
      data: data,
      dataType: "json",
      success: function(data) 
          //var obj = jQuery.parseJSON(data); if the dataType is not     specified as json uncomment this
        // do what ever you want with the server response
     ,
    error: function() 
        alert('error handing here');
    
);

【讨论】:

完美,正是我需要的。当涉及大量数据操作时,字符串太粗糙而无法使用!谢谢!【参考方案3】:
 $("#contactForm").submit(function() 

    $.post(url, $.param($(this).serializeArray()), function(data) 

    );
 );

【讨论】:

解释对 OP 很有帮助。【参考方案4】:

如果表单中的数据正确序列化,您是否在控制台中检查过? ajax请求成功了吗?此外,您没有关闭占位符引号,这可能会导致一些问题:

 <textarea name="comentarii" cols="36" rows="5" placeholder="Message>  

【讨论】:

是的,序列化数据看起来不错,请求成功占位符是复制粘贴错字。 你试过var_dump($_POST);。您还可以检查当您将 $.post url 更改为 getcontact.php?test=1 时,您是否真的在服务器端的 $_GET['test'] 中收到它。 请参阅我的编辑部分。谢谢 这似乎是服务器端问题。【参考方案5】:

如果 POST 或 GET,您是否查看过 firebug?

检查控制台显示。

放入测试脚本:

console.log(data);

你可以看到来自服务器的响应,如果它显示了什么。

【讨论】:

【参考方案6】:

问题可能是PHP配置:

请检查 php.ini 文件中的 ma​​x_input_vars 设置。

例如,尝试将此设置的值增加到 5000。

max_input_vars = 5000

然后重新启动您的网络服务器并尝试。

【讨论】:

【参考方案7】:

两端注册或用户在通过表单提交完成注册时通过ajax自动注册到“Shouttoday”。

var deffered = $.ajax(
     url:"code.shouttoday.com/ajax_registration",
     type:"POST",
     data: $('form').serialize()
    ); 

        $(function() 
            var form;
            $('form').submit( function(event) 
                var formId = $(this).attr("id");
                    form = this;
                event.preventDefault();
                deffered.done(function(response)
                    alert($('form').serializeArray());alert(response);
                    alert("success");
                    alert('Submitting');
                    form.submit();
                )
                .error(function()
                    alert(JSON.stringify($('form').serializeArray()).toString());
                    alert("error");
                    form.submit();
                );
            );
         );

【讨论】:

【参考方案8】:

这是@rahulbhondave 答案的更详细和解释的版本

$('#my-button').click(function () 
    $.post(this.form.action, $(this.form).serializeArray(),
            function (successMessage) 
                console.log(
                    successMessage
                );
            ,
            "json"
        )
        .done(function () 
            alert("second success");
        )
        .fail(function () 
            alert("error");
        )
        .always(function () 
            alert("finished");
        );
);

【讨论】:

以上是关于使用 jQuery 和 PHP 序列化和提交表单的主要内容,如果未能解决你的问题,请参考以下文章

将 ajax 表单提交到 PHP 脚本时出现问题

jquery或js前端提交数据的几种方式

通过AJAX和PHP,提交JQuery Mobile表单

Jquery ajax提交表单几种方法详解

angularjs表单提交 怎么接受数据

如何在提交之前从表单序列化()中获取和替换数据?