调试失败ajax POST调用,类型处于挂起状态

时间:2012-11-05 18:22:44

标签: php javascript ajax post

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

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

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

代码示例

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 net-internals时,我发现处理较小的JSON(长度= 121664)会成功发出POST请求,而net-internals会显示HTTP_TRANSACTION_READ_RESPONSE_HEADERS,但是大JSON(长度= 7036490)会给我 - > net_error = -324(ERR_EMPTY_RESPONSE)而不是响应头。我没有在phpinfo中看到超时信息......

1 个答案:

答案 0 :(得分:0)

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

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