我目前有一个包含输入和名称属性的表单。
我能通过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
我在这里做错了什么?
由于
答案 0 :(得分:3)
两件事:
分配数据:
$.ajax({
url: "myfile.php",
type: "POST",
data: $('.myForm').serialize()
}).done(function(data){
alert(data);
});
使用带输入的前缀字段名称。就像<input name="x"/>
变为<input name="inputs[x]"/>
。
在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
不会超级全局。
答案 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);
}