如何在jQuery中发送Array thru .post?

时间:2013-11-08 23:47:45

标签: javascript php jquery arrays serialization

这是我的代码不起作用:

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做这个?

2 个答案:

答案 0 :(得分:1)

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

如果sessionListJSON实际上是一个JSON字符串,则需要在PHP中对其进行解码:

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

答案 1 :(得分:1)

当我在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);
}