0

我的js代码:

$(function(){
    var arr = new Array('jj', 'kk', 'oo');
    $.post('test12.php', {'arr[]': arr}, function(data){
        alert(data);
    });
});

PHP代码:

<?php
echo print_r($_POST['arr']);

问题是,$.post 接收一个名为 'arr[]' 的键,它应该在 PHP 中用作 'arr[]' 而不是 'arr',但 '$_POST['arr[]']' 没有工作,'arr' 工作。这似乎 Jquery 可能会在向 PHP 发送一些东西之前用花括号 '[]' 做一些事情。

其次,当我删除 'arr[]' 周围的单个配额时,PHP 无法使用 $_POST['arr']; 接收任何内容,我不知道为什么?

以没有花括号的传统方式执行此任务:

$.post('test12.php', {arr: arr}, function(data){
        alert(data);
    });

它工作正常。

因此,当将 javascript 数组发送到 PHP 时,为什么还要使用单引号和花括号,例如

'arr[]'

而不是使用像 arr:arr 这样的简洁方式

我的返回结果是

Array(
   [0]=>jj
   [1]=>kk
   [2]=>oo
)
1

注意数组下面有一个 1,为什么?

4

2 回答 2

0

当您向 php 发送一个名称类似于 php 数组语法的变量时,php 会自动将其解析为您的数组。该功能的文档很少: http ://www.php.net/manual/en/faq.html.php#faq.html.arrays
http://www.php.net/manual/en/language.variables.external .php

您无法关闭该功能,但如果您真的确定,您可以手动解析原始二进制输入流。

附加示例

<input name="foo[bar][3][baz]" value="d">

像最接近的 php 等效项一样访问

$_POST['foo']['bar'][3]['baz']
于 2013-06-30T04:35:59.230 回答
0

jQuery 以 PHP 能够理解的方式自动序列化您的请求,因此:

{arr: [1,2,3]}

arr[]=1&arr[]=2&arr[]=3在幕后自动序列化,在 PHP 中,您可以通过$_POST['arr']数组访问它。

您之所以1在末尾看到多余的内容是因为您echo是 的结果print_r(),即true。你可以有这个代码:

print_r($_POST['arr']);
于 2013-06-30T04:57:45.363 回答