数组在ajax帖子上被砍掉.Ajax发布限制?

Dan*_*nny 8 php arrays ajax jquery multidimensional-array

我有一个多维数组,它由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
          ),
    )
Run Code Online (Sandbox Code Playgroud)

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

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

我在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");
  }
});
Run Code Online (Sandbox Code Playgroud)

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

if($_POST['friends']) {
    $friends = $_POST['friends'];   
} else {
    $friends = FALSE;
} 
Run Code Online (Sandbox Code Playgroud)

Fas*_*ack 15

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

max_input_vars = 1000000

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

从PHP手册:

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

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

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


And*_*rew 6

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

var jsonDataString = JSON.stringify(data)
//data - array, associative array, any other variables

$.ajax({
...
    data: {
        friends: jsonDataString,
    }
...
});
Run Code Online (Sandbox Code Playgroud)

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

<?php
...
$friendsJsonString = $_POST['friends'];
$friends = json_decode($friendsJsonString);
...
Run Code Online (Sandbox Code Playgroud)

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