从序列化数组访问变量的方法是什么

时间:2018-05-12 作者:egauvin

我在访问从ajax发送到php的post变量时遇到问题。我总是得到空值。

//in my jquery
var post_data = $(\'form#post\').serializeArray();

//in my ajax
data: {
    \'action\': \'function_name_here\',
    \'post_data\': post_data
},

//in my php
(isset($_REQUEST)) {
    $postData = $_REQUEST[\'post_data\'];
}
如果使用serialize()而不是serializeArray(),则可以访问如下变量:

parse_str($postData, $vars);
$postID = $vars[\'post_ID\'];
是否可以使用serializeArray()?

根据Mat的建议,我尝试了$\\u POST。通过$\\u REQUEST和$\\u POST,我得到了一个我认为是php数组的东西。我可以打印到控制台,它看起来像这样(摘录):

[{"name":"_wpnonce","value":"74a8352385"},{"name":"_wp_http_referer","value":"\\/wp-admin\\/post.php?post=13855&action=edit"},{"name":"user_ID","value":"1"}
我尝试过以下方法:$\\u POST[\'POST\\u data\'][\'user\\u ID\']

但它不起作用。

1 个回复
最合适的回答,由SO网友:Mat 整理而成

您应该从$_POST 服务器变量,而不是$_REQUEST 例如:。

(isset($_POST)) {
    $postData = $_POST[\'post_data\'];
}
$_REQUEST 不会强迫您确定变量是否来自GET、POST、COOKIES等。这对于调试脚本或变量何时来自多个源中的一个非常有用。例如,您可能有来自表单(POST)或表单链接(GET)的表单信息。

但是,由于$_REQUEST 从包括cookie在内的多个来源捕获数据,因此,如果有人变得聪明而你不小心,则可能会出现不当行为。

为了在PHP中使用发布的JSON(JavaScript对象表示法)数据,您可以使用json_decode() 例如:。

$postData = json_decode( $_POST[\'post_data\'] );

然后,例如,要访问您需要使用的变量,请执行以下操作:

_wpnonce - $postData[0]->value

_wp_http_referer - $postData[1]->value

user_ID - $postData[2]->value

或者,如果您想返回更具可读性的整洁数组,可以在json\\u解码的$postData:

$tidy_array = array();

foreach ( $postData as $object ){
    $tidy_array[$object->name] = $object->value;
}
然后您可以这样访问数据:

$tidy_array[\'_wpnonce\']

$tidy_array[\'_wp_http_referer]

$tidy_array[\'user_ID\']

结束