-2

ajaxとphpを使用して、データを.jsonファイルに保存しようとしています。現在、エラーが発生し、データが保存されておらず、その理由がわかりません。

これは私の .js ファイルです:

var data = {
    "test": "helloworld"
}
    $.ajax({
    url: "save.php",
    data: data,
    dataType: 'json',
    type: 'POST',
    success: function (data) {
        $("#saved").text("Data has been saved.");},
    error: function (data){
        $("#saved").text("Failed to save data !");}
    });

そして、ここに私のphpファイルがあります:

    $json = $_POST['data'];
    if(json_decode($json) != null){
      $file = fopen('web/js/data_save.json', 'w+');
      fwrite($file, json_encode($json));
      fclose($file);
    }else{
        print("<pre>Error saving data !</pre>");
    }

ajaxエラーを保存しようとすると、トリガーされます:

     error: function (data){
 $("#saved").text("Failed to save data !");
     }

誰かが私を正しい方向に導いてくれることを願っています:)

4

2 に答える 2

1

これは私にとってはうまくいきます

.js:

 $(document).ready(function() {
    var json_object = {"data": "helloworld"};

    $.ajax({
        url: "../tests/save.php",
        data: json_object,
        dataType: 'json',
        type: 'POST',
        success: function(json_object) {
            console.log(json_object);
            $("#saved").text("Data has been saved.");
        },
        error: function(json_object) {
            console.log(json_object);
            $("#saved").text("Failed to save data !");
        }
    });
});

.php

$post_data = $_POST['data'];
if (!empty($post_data)) {
    $file = fopen('data_save.json', 'w+');
    fwrite($file, json_encode($post_data));
    fclose($file);
    echo json_encode('success');
} 

$_POST で var_dump を実行すると、変数が php の配列として送信されることがわかります。また、コールバックの成功のためにjson文字列をエコーする必要があります

于 2013-10-02T12:42:58.177 に答える
-1

dataリクエストにキーがありません。http_get_request_body必要な結果を得るには、生の本文を取得するために、または何かを使用して、リクエスト本文全体を JSON として解析する必要があります。

編集: 混乱が生じているように思われるため、ここにさらに説明を加えます。

JSON POST リクエストを PHP に送信する場合、通常のリクエストのように変数を使用することはできません。$_POST

curl -H 'Content-Type: application/json' -d '{"foo": "bar"}' myhost/foo.php

次のように定義された foo.php を使用すると、空の配列が出力されます。必要に応じて自分で試してください。

<?php
print_r($_POST);

POST リクエストの本文から JSON を取得する必要がある場合は、すべての bodyを取得してから、JSON から解析する必要があります。これはいくつかの方法で行うことができますが、そのうちの 1 つは編集前に書いたものです。を使用して、エクステンションを使用せずに全身を取得することもできます

file_get_contents('php://input')

結果は同じになるはずです。

したがって、次のコードを使用すると、必要なものを取得できます。

<?php
$json = json_decode(file_get_contents('php://input'), true);
print_r($json);
于 2013-10-02T12:15:56.297 に答える