如何从PHP中的serializeArray获取POST值?

我正在尝试这种新方法,我见过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? 

谢谢,理查德

像Gumbo建议的那样,您可能无法处理json_decode的返回值。
尝试

 $data = json_decode($_POST['data'], true); var_dump($data); 

如果$data不包含预期数据,则var_dump($_POST); 查看Ajax调用发布到您的脚本的内容。 您可能正在尝试从错误的密钥访问JSON。

编辑
实际上,你应该确保你真的在第一时间发送JSON 🙂
序列化状态的jQuery文档.serializeArray()方法创建一个JavaScript对象数组可以编码为JSON字符串。 准备编码不是JSON。 显然,jQuery中没有Object2JSON函数,所以要么使用https://github.com/douglascrockford/JSON-js/blob/master/json2.js作为第三方库,要么使用http://api.jquery.com/序列化/而不是。

返回的JSON结构不是字符串。 您必须使用插件或第三方库来“字符串化”它。 有关详细信息,请参阅此

http://www.tutorialspoint.com/jquery/ajax-serializearray.htm

通过进行以下更改,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 

它可以通过使用序列化数组和json_decode()

 // js var dats = JSON.stringify($(this).serializeArray()); data: { values : dats } // ajax call //PHP $value = (json_decode(stripslashes($_REQUEST['values']), true)); 

值以数组forms接收

可以使用$ value [0] [‘value’]检索每个值。每个html组件名称都以$ value [0] [‘name’]的forms给出

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

我有一个非常类似的情况,我相信Ty W有正确的答案。 我将包含一个我的代码示例,以防万一有足够的差异来改变结果,但似乎你可以像在PHP中一样使用发布的值。

 // Javascript $('#form-name').submit(function(evt){ var data = $(this).serializeArray(); $.ajax({ ...etc... // PHP echo $_POST['fieldName']; 

这是一个非常简化的示例,但我认为关键是您不想使用json_decode()方法,因为它可能会产生不需要的输出。

javascript不会改变值发布的方式吗? 通过$_POST['name_of_input_goes_here']你不应该像往常一样通过PHP访问这些值

编辑:您可以随时转储$ _POST的内容,以使用print_r($_POST)查看您从javascript表单提交中收到的内容。 这可以让您了解在PHP中需要做什么来访问所需的数据。

你可以在php中使用这个函数来反转serializeArray()。