【问题标题】:debugging failed ajax POST call, type is pending调试失败的 ajax POST 调用,类型未决
【发布时间】:2012-11-05 18:22:43
【问题描述】:

我有一个 javascript 文件,它生成一些 JSON 并对写入和创建 JSON 文件的 php 文件进行 AJAX 调用。在我开始生成相当大的 JSON 文件之前,一切都运行良好。目前,我有一个 9mb 的 json 文件,并且我知道它的结构正确,因为当我使用 console.log 将其打印出来并手动放入文件时,它可以工作。

但是,Ajax 调用未能成功。我尝试了普通的 XHR 调用和 jQuery Ajax,都失败了并且没有提供太多信息。我在 Chrome 和 Firefox 中尝试过。查看开发人员工具,状态文本显示(失败)并且类型显示待处理。没有出现状态代码,我所拥有的只是 Ajax 错误回调中的 statusText: "error"。我尝试过处理超时和同步调用,但似乎没有任何效果/

关于如何进一步调试的任何想法?

代码示例

var name = "test.json";
var json = '{
    "type": "FeatureCollection",
    "bbox": [
        1.4137153625488281,
        42.4288330078125,
        1.7842082977294922,
        42.652313232421875
    ],
    "features": [
        {
            "type": "Feature",
            "bbox": [
                1.4137153625488281,
                42.4288330078125,
                1.7842082977294922,
                42.652313232421875
            ],
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    [
                        [
                            1.5753068923950195,
                            42.6473388671875
                        ],
                        [
                            1.5828666687011719,
                            42.63543701171875
                        ],
                        [
                            1.5753068923950195,
                            42.6473388671875
                        ]
                    ]
                ]
            },
            "properties": {
                "ID_0": "6",
                "ISO": "AND",
                "NAME_ENGLI": "Andorra",
                "NAME_OBSOL": ""
            }
        }
    ]
}';



$.ajax({
        type:"POST",
        url:"log.php",
        data: { data: json, file: name },
        dataType: "json",
        success:function(response) {
            console.log(response);
        },
        error:function(error) {
            console.log(error);
        }
});

这是log.php:

if (isset($_POST['file'])) {
$file = $_POST['file'];
$data = str_replace("\\", "", $_POST['data']);

file_put_contents($file, $data);
exit();
}

我的主要问题是,当 AJAX 失败时,如何更好地调试? 我这里的错误回调没有提供任何好的信息。我尝试查看 chrome 中的 net-internals,但在那里找不到太多内容。有什么想法吗?

也许这是一个服务器端问题。当我查看 Chrome 网络内部时,我发现处理较小的 JSON(长度 = 121664)会产生成功的 POST 请求,网络内部显示 HTTP_TRANSACTION_READ_RESPONSE_HEADERS 但大 JSON(长度 = 7036490)给我 --> net_error = -324( ERR_EMPTY_RESPONSE) 而不是响应头。虽然我没有在 phpinfo 中看到超时信息...

【问题讨论】:

  • 请发布代码示例。你在js中使用回调吗?
  • 可能响应比服务器允许的大。
  • 只需在浏览器中输入 URL 并查看服务器是否响应。如果是这样,您的问题出在客户端上。如果没有,它在服务器上。
  • php_value post_max_size 100M放到你的.htaccess文件中(或者直接在php.ini里改)再测试一下,可能只是POST大小限制
  • 我检查了 phpinfo 并且 post_max_size 设置为 32MB,这已经足够了。这不是服务器问题,客户端有错误。当我生成一个不太大的 JSON 文件时,一切正常。大 JSON 文件也是有效的,所以它应该可以工作,但不能。

标签: php javascript ajax post


【解决方案1】:

首先,检查服务器端的错误日志。
如果请求需要很长时间来处理,请尝试增加 PHP 中的 maxRequestLength 设置。

如果这是一个客户端问题,那么让它跨浏览器工作的最佳选择是在客户端拆分您的帖子并将其分成几个部分发布。例如,在服务器端,您可以将其保存在临时文件中。

【讨论】:

  • 这是一个客户端问题,是的,拆分帖子会起作用,但我想调试大型 Ajax 请求中失败的原因。问题是如何。
猜你喜欢
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
相关资源
最近更新 更多