52

我正在尝试使用 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 的情况下做一个老式的表单,并且所有数据都是正确的。

我不明白这将是一个服务器配置问题。有任何想法吗?

谢谢!

4

8 回答 8

109

你可以使用这个功能

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:// 默认为真。如果设置为 false,它将强制浏览器不缓存请求的页面。

在这里找到官方页面

于 2013-03-02T12:10:22.520 回答
38

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

使用 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');
    }
});
于 2016-08-17T16:53:33.513 回答
1
 $("#contactForm").submit(function() {

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

    });
 });
于 2016-04-11T06:39:12.023 回答
0

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

 <textarea name="comentarii" cols="36" rows="5" placeholder="Message>  
于 2013-03-02T11:38:03.483 回答
0

如果 POST 或 GET,您是否查看过萤火虫?

检查控制台显示。

放入测试脚本:

console.log(data);

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

于 2013-03-02T12:12:45.870 回答
0

两端注册或用户在通过表单提交完成注册时通过 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();
                });
            });
         });
于 2016-07-20T11:43:53.800 回答
0

问题可能是PHP配置:

请检查php.ini 文件中的max_input_vars设置。

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

max_input_vars = 5000

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

于 2015-08-19T06:39:15.807 回答
0

这是@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");
        });
});
于 2021-04-25T00:05:28.507 回答