我正在尝试这种新方法,我见过serializeArray()
。
//with ajax
var data = $("#form :input").serializeArray();
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc
所以我得到了这些键值对,但是如何使用PHP访问它们?
我认为我需要这样做,但它不会起作用:
// in PHP script
$data = json_decode($_POST['data'], true);
var_dump($data);// will return NULL?
谢谢,理查德
答案 0 :(得分:6)
与Gumbo建议一样,您可能无法处理json_decode的返回值 尝试
$data = json_decode($_POST['data'], true);
var_dump($data);
如果$data
不包含预期的数据,那么var_dump($_POST);
可以看到Ajax调用发布到您的脚本的内容。您可能正在尝试从错误的密钥访问JSON。
修改强>
实际上,你应该确保你真的在第一时间发送JSON :)
用于序列化状态的jQuery文档 .serializeArray()方法创建一个JavaScript 数组对象,准备编码作为JSON字符串。 Ready要编码的不是JSON。显然,jQuery中没有Object2JSON函数,因此要么使用https://github.com/douglascrockford/JSON-js/blob/master/json2.js作为第三方库,要么使用http://api.jquery.com/serialize/。
答案 1 :(得分:4)
返回的JSON结构不是字符串。您必须使用插件或第三方库来“字符串化”它。有关详细信息,请参阅此处:
http://www.tutorialspoint.com/jquery/ajax-serializearray.htm
答案 2 :(得分:4)
通过进行以下更改,OP实际上仍然可以使用serializeArray()而不仅仅是serialize():
//JS
var data = $("#form :input").serializeArray();
data = JSON.stringify(data);
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc
// PHP
$data = json_decode(stripslashes($_POST['data']),true);
print_r($data); // this will print out the post data as an associative array
答案 3 :(得分:3)
可以使用serialize数组和json_decode()
// js
var dats = JSON.stringify($(this).serializeArray());
data: { values : dats } // ajax call
//PHP
$value = (json_decode(stripslashes($_REQUEST['values']), true));
值以数组
的形式接收每个值都可以使用$ value [0] ['value']检索每个html组件名称为$ value [0] ['name']
print_r($value) //gives the following result
Array ( [0] => Array ( [name] => name [value] => Test ) [1] => Array ( [name] => exhibitor_id [value] => 36 ) [2] => Array ( [name] => email [value] => test@gmail.com ) [3] => Array ( [name] => phone [value] => 048028 ) [4] => Array ( [name] => titles [value] => Enquiry ) [5] => Array ( [name] => text [value] => test ) )
答案 4 :(得分:1)
我的情况非常相似,我相信Ty W有正确的答案。我将包含一个我的代码示例,以防万一有足够的差异来改变结果,但似乎你可以像在PHP中一样使用发布的值。
// Javascript
$('#form-name').submit(function(evt){
var data = $(this).serializeArray();
$.ajax({ ...etc...
// PHP
echo $_POST['fieldName'];
这是一个非常简化的示例,但我认为关键点在于您不想使用json_decode()
方法,因为它可能会产生不需要的输出。
答案 5 :(得分:0)
javascript不会改变值发布的方式吗?您不应该像往常一样通过$_POST['name_of_input_goes_here']
编辑:您可以随时转储$ _POST的内容,以查看您使用print_r($_POST)
从javascript表单提交中收到的内容。这可以让您了解在PHP中需要做什么来访问所需的数据。
答案 6 :(得分:-1)
您可以在php中使用此功能来反转serializeArray()。
<?php
function serializeToArray($data){
foreach ($data as $d) {
if( substr($d["name"], -1) == "]" ){
$d["name"] = explode("[", str_replace("]", "", $d["name"]));
switch (sizeof($d["name"])) {
case 2:
$a[$d["name"][0]][$d["name"][1]] = $d["value"];
break;
case 3:
$a[$d["name"][0]][$d["name"][1]][$d["name"][2]] = $d["value"];
break;
case 4:
$a[$d["name"][0]][$d["name"][1]][$d["name"][2]][$d["name"][3]] = $d["value"];
break;
}
}else{
$a[$d["name"]] = $d["value"];
} // if
} // foreach
return $a;
}
?>