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


passing serialized jquery data to php, what am i doing wrong?

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

我能够通过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的第一个名称变量

我在这里做错了什么?

谢谢

两件事:

  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)。

更新

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

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

然后使用 $POST 而不是 $_POST .请注意,$POST不会是超全球性的。

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

$.ajax通话中,删除inputs=,仅单独使用inputValues。这将允许您使用 $_POST['myvar'] 获取表单中的各个变量。

看看这个: 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);

看看你发送到PHP的内容...如果你将'inputvalues='与序列化形式连接起来,你最终会向PHP发送以下内容:

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

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

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

data:inputValues

您需要更改帖子中的接受条件。

您还可以将数据序列化为 JSON 并反序列化,但这应该可以帮助您入门。

我没有

测试这段代码,但我认为它可以工作

    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);
}