数组在ajaxpost上被砍掉。 Ajax发布限制?

我有一个多维数组,它由426个较小的数组组成,它们也包含4个属性。下面是426个数组之一的例子……

array( //Main array 0 => array( //1 of 426 arrays 'name' => 'Danny', 'email' => 'your@email.com', 'picture_url' => 'http://www.website.com', 'score' => 89 ), ) 

我用jquery的ajax函数将这个数组发布到一个php文件,将它们添加到数据库中…我的问题是当它发布到php文件时,数组似乎被切断了。 只有大约一半的数组实际到达php文件…

这让我相信在ajax上发布时可能存在文件大小限制。 但是,我的arrays的大小似乎相对较小..

我在WAMP上运行我的应用程序..

任何人都可以解释可能发生的事情吗?

更新:

我这样发布我的数组:

 $.ajax({ type: "POST", url: "invite_friends.php", data: { theID: me.id, friends: multidimensional_array //This is the array <--- }, success: function(data, textStatus, jqXHR) { return console.log(data); }, error: function(jqXHR, textStatus, errorThrown) { return alert("Error: Oops, there has been a problem"); } }); 

我像这样检索我的数组(在invite_friends.php中)。

 if($_POST['friends']) { $friends = $_POST['friends']; } else { $friends = FALSE; } 

您需要打开php.ini文件并设置(或创建)此行:

max_input_vars = 1000000

max_input_vars的默认值为1000,这将截断一个总数为1000的数组。 只需将其更改为一个非常高的数字(在我的情况下,我需要将其设置为一百万)。

从PHP手册:

可以接受多少输入变量(限制分别应用于$ _GET,$ _POST和$ _COOKIE superglobal)。 使用此指令可减轻使用哈希冲突的拒绝服务攻击的可能性。 如果输入变量多于此指令指定的输入变量,则会发出E_WARNING,并从请求中截断其他输入变量。 此限制仅适用于多维输入数组的每个嵌套级别。

请记住:正如手册所述,此默认限制已用于防止拒绝服务攻击。

希望这有帮助,即使这是一个老问题。

您应该在客户端以json格式转换所有数据并将其作为文本发送。

 var jsonDataString = JSON.stringify(data) //data - array, associative array, any other variables $.ajax({ ... data: { friends: jsonDataString, } ... }); 

在服务器端只需解码json文件。

  

由于安全风险,更改php.ini不是一个好主意。

我有完全一样的问题。

 $.ajax({data:{x:x,y:y}}); 

最后,事实certificate,一些值是日期格式(对象)。 当它们转换为简单类型(字符串或整数)时,问题就解决了。 希望这可以提供帮助。

尝试在.htaccess和max_input_time中将php_value post_max_size设置为至少16M,这样就不会有时间。

 php_value post_max_size 16M php_value max_input_time 4000