0

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

我可以通过 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

我在这里做错了什么?

谢谢

4

5 回答 5

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在它不是标量值时打印)。

更新

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

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

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

于 2012-06-30T06:28:06.247 回答
2

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

在您的$.ajax通话中,删除inputs=inputValues单独使用。这将允许您使用$_POST['myvar'].

于 2012-06-30T06:29:19.693 回答
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);
于 2012-06-30T06:34:00.597 回答
0

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

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

所以,是的……它会很混乱。:)

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

data:inputValues

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

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

于 2012-06-30T06:28:26.327 回答
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);
}
于 2012-06-30T06:28:51.250 回答