Ajax / PHP:并非所有POST数据都被接收

时间:2018-07-26 15:02:39

标签: javascript php ajax post

我通过ajax(发布)将嵌套的json对象发送到我的php api(使用Apache服务器)。但是我有一个问题。似乎并非所有数据都发送到我的php API。

我已经检查了我的php代码中是否有任何错误,但是没有。我也没有错误。所以我做了以下事情:我用过

JSON.stringify()

手动创建一个包含我的POST内容的json文件。当用php打开json文件时,一切正常,所以我认为我的帖子请求大小有问题。我手动创建的json文件为176 KB。

我了解了php.ini和post_max_size。因此,我只是尝试将其从8增加到16 M,重新启动服务器,但没有任何变化。

也许有人可以帮助我。

ajax:

$.ajax({
            url: 'index.php',
            type: 'POST',
            dataType: 'json',
            data: {api: 'save_reference_file', filename: _filenameInput,  timestamp: timeStamp, drives: dataHandler.getDriveData()},
            error: function (phpResponse) {
                console.log(phpResponse);
                onError404();
            },
            success: function (phpResponse) {
                if (phpResponse.actionsuccess === true) {
                    onSuccess();
                } else {
                    onError500();
                }
            },
        });

ajax请求触发了我的PHP API,该API应该在服务器上使用驱动器数据创建一个json文件。因此不需要数据回调。

一个例子: 驱动器阵列包含183个嵌套对象。为了进行测试,我计算了到达我的PHP API的对象数量。是34。没有收到第34个对象的最多数据。

$sended_data = $_POST['drives'];
$amound = count($sended_data);

PHP版本:7.2.7

3 个答案:

答案 0 :(得分:1)

new limit within php: 1000 fields per POST. Does someone know, if the number can be influenced?

编辑php.ini文件解决了此问题。我对此并不陌生,所以让我对所有其他初学者说:如果您具有php.ini-production和php.ini-development,请复制以下文件之一,将其重命名为php.ini,编辑此文件并重新启动服务器。然后它将起作用。我(愚蠢的)错误是同时编辑了两个文件,所以我没有做任何更改。

也许一位专家可以解释这两个文件之间以及您使用它们时的区别。

答案 1 :(得分:1)

php.ini 中有两个相关设置需要调查:

  • df['new'] = df.apply(lambda row: ','.join([str(row.col_n_1)] if row.col_1 == 1 else [] + [str(row.col_n_2)] if row.col_2 == 1 else []), axis = 1) -整个请求请求原始正文的总大小可接受
  • post_max_size-可接受的单个帖子字段数

您的问题很可能是max_input_vars的问题,该问题默认为相当低的数字(例如40左右)。在PHP 7+中,它的最高上限为1000。

如果您的问题是字段被截断了,但是最后收到的字段是完整的,则max_input_vars可能有问题。

如果最后收到的字段是部分字段,则max_input_vars可能有问题。


作为一般惯例,如果您发送的字段超过30个,则应尽可能将其压缩为字符串化的json值,以避开此问题,尤其是在您的代码需要保持可移植性且您没有在将要运行的所有服务器上直接访问php.ini 。如果无法实现,则可以在php.ini中提高post_max_size的值,然后重新启动服务器以解决此问题。

答案 2 :(得分:-2)

如果您的请求超过30秒。检查php超时,默认情况下为30秒。您可以在php.ini

中更改max_execution_time