【问题标题】:Ajax / PHP: Not all POST data is receivedAjax / PHP:并非所有 POST 数据都被接收
【发布时间】:2019-01-03 15:17:49
【问题描述】:

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

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

JSON.stringify()

手动创建一个包含我的 POST 内容的 json 文件。用 php 打开 json 文件时一切正常,所以我认为我的 post 请求的大小有问题。我手动创建的 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,它应该在服务器上创建一个带有驱动器数据的 json 文件。所以不需要数据回调。

一个例子: 驱动器阵列包含 183 个嵌套对象。为了测试,我计算了到达我的 php api 的对象数量。是 34。第 34 个对象的大部分数据没有收到。

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

PHP版本:7.2.7

【问题讨论】:

  • 在inspector中检查post数据——所有东西都发送了吗?
  • 我的 php 文件夹中有一个 php.ini-development 和一个 php.ini-production。上次我编辑这两个文件以测试设置并重新启动服务器但没有任何改变。我是否必须重命名这些文件或其他名称?也许我对文件的编辑是错误的。

标签: javascript php ajax post


【解决方案1】:

如果您的请求时间超过 30 秒。检查 php 超时,默认为 30 秒。您可以在 php.ini 中更改 max_execution_time

【讨论】:

  • 似乎不需要那么长时间。 〜最大。 1 秒直到我得到服务器响应并创建了 json。
  • 您描述的超时不会导致报告的问题
【解决方案2】:

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,编辑此文件并重新启动服务器.然后它将起作用。我的(愚蠢的)错误是编辑了这两个文件,所以我没有更改。

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

【讨论】:

    【解决方案3】:

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

    • post_max_size - 可接受的整个 post 请求原始正文的总大小
    • max_input_vars - 可接受的单个帖子字段的数量

    您的问题可能与max_input_vars 有关,它默认为一个非常低的数字(例如 40 或其他数字)。在 PHP 7+ 中,它的上限为 1000。

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

    如果收到的最后一个字段是部分的,那么很可能是post_max_size 的问题。


    作为一般惯例,如果您发送超过 30 个帖子字段,则应尽可能将它们压缩为字符串化 json 值以规避此问题,特别是如果您的代码需要保持可移植性并且您没有直接访问将在其上运行的所有服务器上的 php.ini 。如果这不可行,您可以在 php.ini 中提高 max_input_vars 的值并重新启动服务器以更正问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      相关资源
      最近更新 更多