如何从serializearray获取帖子值? 我正在尝试这种新方法,我已经看到Serializearray()。 //与Ajax var data = $(“#form:input”)。serializearray(); post_var = {'action':'process','data':data}; $ .ajax({........等 所以我得到了这些...

问题描述 投票:0回答:7

我得到了这些关键价值对,但是如何使用PHP访问它们?

我以为我需要这样做,但它行不通:

// in PHP script $data = json_decode($_POST['data'], true); var_dump($data);// will return NULL?
thanks,理查德
    

建议,您可能不会处理

json_decode

.
的返回值。
尝试

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

php jquery json parsing serializearray
7个回答
6
投票
$data

查看Ajax调用的内容发布了您脚本的内容。可能是您试图从错误的键访问JSON。 eDit

实际上,您应该确保您真的首先发送JSON:)
用于序列化状态的jQuery文档
.serializearray()方法创建了一个对象的JavaScript

array

即将编码为JSON字符串。显然,jQuery中没有object2json函数,因此要么使用
https://github.com/douglascrockford/json-js/blob/master/master/json2.js
用作第三方lib或使用

Http://api.jquery .com/serialize/

代替
实际上,OP可以通过进行以下更改来使用serializearray(),而不是仅仅使用serialize():
var_dump($_POST); 通过使用序列化数组和JSON_DECODE() //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 值接收到一个阵列 可以使用$ value [0] ['value']检索每个html组件名称为$ [0] ['name']

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

5
投票

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

4
投票

JavaScript不会改变值发布的方式吗?  您是否应该能够像往常一样通过php访问该值

Edit:您始终可以转储$ _ post的内容,以查看使用JavaScript表单提交的内容,使用

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] => [email protected] ) [3] => Array ( [name] => phone [value] => 048028 ) [4] => Array ( [name] => titles [value] => Enquiry ) [5] => Array ( [name] => text [value] => test ) )

。 这将使您了解您需要在PHP中访问您需要的数据需要做什么。

我的情况与此相似,我相信ty w有正确的答案。我将包含一个代码的示例,以防万一有足够的差异可以更改结果,但是似乎您可以像往常一样在PHP中使用发布的值。

$_POST['name_of_input_goes_here']

3
投票
这个是一个非常简单的示例,但我认为关键是您不想使用

print_r($_POST)

方法,因为它可能会产生不必要的输出。

您可以在PHP中使用此功能来逆转serializearray()。 // Javascript $('#form-name').submit(function(evt){ var data = $(this).serializeArray(); $.ajax({ ...etc... // PHP echo $_POST['fieldName'];


0
投票

也许它将帮助那些正在寻找的人:)

您以这样的方式发送数据:

json_decode()

然后在服务器端使用
Parse_str(

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

0
投票

变量

$.ajax({ url: 'url_name', data: { form_data: $('#form').serialize(), }, dataType: 'json', method: 'POST' }) console.log($('#form').serialize()) //'f_ctrType=5&f_status=2&f_createdAt=2022/02/24&f_participants=1700'
将包含以下内容:

$_POST['form_data'], $res

    

@Adriano de abreu Wanderley的解决方案可以使用dine的字段名称处理,而没有钥匙。

0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.