【问题标题】:How to send Array thru .post in jQuery?如何在 jQuery 中通过 .post 发送数组?
【发布时间】:2013-11-08 23:47:45
【问题描述】:

这是我的代码不起作用:

var sessionListJSON = GatherSessionsFromPage();

    $.post('ajax.php', {
        _ExportMissingAddressesToXLS : 1,
        sessions : sessionListJSON  // ARRAY
    }, function(data) {

    }); 

这是我的php 尝试捕捉它:

else if (array_key_exists('_ExportMissingAddressesToXLS', $_POST)) { // {{{
    $sessions = $_POST['sessions'];
    ExportMissingParentAddressesToXLS($sessions);
} // }}}

如何通过jQuery.post 正确发送此数组,然后在 PHP 中检索它?另外,这会是序列化的情况吗?如果是这样,你如何为 JS/jQuery 做到这一点?

【问题讨论】:

  • 如果是 JSON,那么它已经被序列化了——这就是 JSON 的全部意义。
  • 而且如果是数组的话,把JSON放在变量名里会很混乱。
  • 试着把 var_dump($_POST);在 ajax.php 脚本中的任何条件之前

标签: javascript php jquery arrays serialization


【解决方案1】:

jQuery 自动为您在$.post() 中序列化数组。在 PHP 中,$_POST['sessions'] 将是一个数组,如果 sessionListJSON 是一个数组。你可以通过普通的数组索引,foreach等来访问它。

如果sessionListJSON真的是JSON字符串,则需要在PHP中解码:

$session = json_decode($_POST['sessions']);

【讨论】:

  • 是的,就是这样。我想到了我正在传递一个数组,但我想到它是一个数组。我猜它只是沿着 JSON 字符串
【解决方案2】:

当在 javascript 和 PHP 之间传递任何复杂的数据结构时,我的建议是使用 JSON 序列化/反序列化,而不是完全依赖 $_POST 行为。

这在 javascript/jQuery 中可能看起来像这样。

var json = JSON.stringify({
   _ExportMissingAddressesToXLS : 1,
    sessions : sessionListJSON  // ARRAY
});
$.ajax({
    type: 'POST',
    url: 'ajax.php',
    contentType: 'application/json',
    dataType: 'json', // if you expect JSON in return
    data: json,  // your JSON string here
    success: // your success handler
    error: // your error handler
});

在 PHP 方面,由于您不处理表单编码数据,因此您需要读取 PHP 的原始输入。幸运的是,这非常简单,将 POST 数据转换为 PHP 对象/数组非常简单。就这么简单:

$json = file_get_contents('php://input');
$variable = json_decode($json);

请注意,使用默认 json_decode() 行为,您实际上会得到一个可以使用的对象

if($variable->_ExportMissingAddressesToXLS === 1) {
     $sessions = $variable->sessions;
     ExportMissingParentAddressesToXLS($sessions);
}

【讨论】:

    猜你喜欢
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2023-03-17
    相关资源
    最近更新 更多