将序列化的jquery数据传递给php,我做错了什么?

时间:2012-06-30 06:21:07

标签: php jquery ajax serialization

我目前有一个包含输入和名称属性的表单。

我能通过jquery得到我需要的东西:

 var inputValues= $('.myForm').serialize();

如果我alert(inputValues),我得到了我需要的东西,(比如表格GET变量:categories=examplevalue&name=examplename&email=exampleemail

现在,我正试图用ajax将它传递给PHP,就像这样( ajax.js

            $.ajax({
                url: "myfile.php",
                type: "POST",
                data: "inputs="+inputValues
            }).done(function(data){
                alert(data);
            });

在我的 PHP 中,我有这个:

if(isset($_POST['inputs'])){
   echo $_POST['inputs'];
}

我认为它会根据我的表单警告出一堆变量,但它只回显出第一个名称变量categories

我在这里做错了什么?

由于

5 个答案:

答案 0 :(得分:3)

两件事:

  1. 分配数据:

    $.ajax({
            url: "myfile.php",
            type: "POST",
            data:  $('.myForm').serialize()
    
    }).done(function(data){
            alert(data);
    });
    

    使用带输入的前缀字段名称。就像<input name="x"/>变为<input name="inputs[x]"/>

  2. 在php中显示数组:

    if(isset($_POST['inputs'])){
       var_dump($_POST['inputs']);
    } 
    

    echo只会在不是标量值时打印Array

  3. 更新

    如果,Lior Cohen是对的,您的服务器无法识别字段名称表示法(不是默认php设置的情况),那么您可以使用这个简单的解决方法:

    parse_str(file_get_contents("php://input"), $POST);
    

    然后使用$POST代替$_POST。请注意,$POST不会超级全局。

答案 1 :(得分:2)

serialize()生成一个查询字符串(foo=bar&baz=yikes)格式,该格式无法分配给单个参数(在您的情况下为inputs=...)。

$.ajax来电中,移除inputs=,然后单独使用inputValues。这样您就可以使用$_POST['myvar']获取表单中的各个变量。

答案 2 :(得分:1)

检查出来:http://jquery.webspirited.com/2011/02/jquery-serializepost/

很抱歉格式化我将在计算机上修复

 (function($) {

        $.fn.serializePost = function() {

var data = {};

var formData = this.serializeArray();

for (var i = formData.length; i--;) {

var name = formData[i].name;

var value = formData[i].value;

var index = name.indexOf('[]');

if (index > -1) {

name = name.substring(0, index);

if (!(name in data)) {

data[name] = [];

}

data[name].push(value);

}

else

data[name] = value;

}

return data;

};

})(jQuery);

答案 3 :(得分:0)

只要看看你发送给PHP的内容......如果你将'inputvalues ='与serialzied表单连接起来,你最终会将以下内容发送给PHP:

inputs=categories=examplevalue&name=examplename&email=exampleemail

所以,是的......它会被混淆。 :)

相反,只需在jQuery中执行此操作:

data:inputValues

您需要在帖子上更改接受条件。

您也可以将数据序列化为JSON并对其进行反序列化,但这应该可以帮助您入门。

答案 4 :(得分:0)

我没有测试过这段代码,但我认为它有效

    var inputValues= $('.myForm').serialize();
    $.ajax({
        url: "myfile.php",
        type: "POST",
        data: inputValues,
        success: function(data){
            alert(data);
            // or use: console.log(data); /*you need firebug to log*/
        }
    });

//和php

if(isset($_POST)){
   var_dump($_POST);
}