0

JSONを生成し、JSONファイルを書き込んで作成するphpファイルをAJAX呼び出しするjavascriptファイルがあります。かなり大きなJSONファイルの生成を開始するまで、すべてがうまく機能していました。現在、私は9mbのjsonファイルを持っていますが、console.logを使用して印刷し、手動でファイルに入れると機能するため、正しく構造化されていることがわかります。

ただし、Ajax呼び出しは成功しません。通常のXHR呼び出しとjQueryAjaxを試しましたが、どちらも失敗し、多くの情報を提供しません。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を見ると、小さいJSON(長さ= 121664)を処理するとPOSTリクエストが成功し、net-internalsはHTTP_TRANSACTION_READ_RESPONSE_HEADERSを表示しますが、大きいJSON(長さ= 7036490)は-> net_error = -324(応答ヘッダーの代わりにERR_EMPTY_RESPONSE)。しかし、phpinfoにタイムアウト情報が表示されませんでした...

4

1 に答える 1

0

まず、サーバー側のエラー ログを確認します。リクエストの処理に時間がかかる場合は、PHP の設定を
増やしてみてください。maxRequestLength

クライアント側の問題である場合、クロスブラウザで動作させるための最善の策は、クライアント側で投稿を分割し、いくつかの部分に投稿することです。サーバー側では、たとえば一時ファイルに保存できます。

于 2012-11-05T20:26:44.920 に答える