0

PHP ファイルに対して Ajax を使用して HTTP POST リクエストを発行していますが、目的の結果が得られません。$_POST と $_GET は両方とも空です。私は何かを見落としていると思いますが、何が何なのかわかりません。

リクエストを発行するための私のコードは次のとおりです。

this.save = function() {

    alert(ko.toJSON([this.name, this.description, this.pages]));
    $.ajax("x", {
        data: ko.toJSON([this.name, this.description, this.pages]),
        type: "post", contentType: "application/json",
        success: function(result) { alert(result) },
        error : function(jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown)}
    });
};

3 行目の JSON に警告することに注意してください。その JSON は正しいので、5 行目の入力は有効です。

PHP での私のテスト方法:

header('Content-type: application/json; charset=utf-8');
echo json_encode(array_merge($_POST, $_GET));
exit;

私が得ている応答は空の配列です。

  • 入力をテストしました(上記を参照)。
  • PHP の例の 2 行目を I get that back in my page に置き換えると、Ajax 呼び出し自体が成功することがわかりjson_encode(array('success' => true));ます。つまり、URL は正しいのです。
  • GET と POST の両方でテストしましたが、同様の否定的な結果が得られました。
4

1 に答える 1

2

JSONリクエストを送信しているため、$_POSTと$_GETの両方が空になっています。次のようにデータを送信してみてください。

$.ajax("x", {
    data: { data: [this.name, this.description, this.pages] },
    type: "post", 
    success: function(result) { alert(result) },
    error : function(jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown)}
});

今中を見てください$_POST["data"]

または、JSONリクエストを使用する必要がある場合は、PHPファイルで逆シリアル化する必要があります。

$.ajax("x", {
    data: { data: ko.toJSON([this.name, this.description, this.pages]) },
    type: "post", 
    success: function(result) { alert(result) },
    error : function(jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown)}
});

次にデコードします:

$json = $_POST['json'];
$data = json_decode($json);

POST本文で純粋なJSONリクエストを送信する場合:

$.ajax("x", {
    data: ko.toJSON([this.name, this.description, this.pages]),
    type: "post", 
    contentType: 'application/json',
    success: function(result) { alert(result) },
    error : function(jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown)}
});

その後:

$data = json_decode(file_get_contents("php://input"));

php://inputこれは、リクエスト本文から生データを読み取ることができる読み取り専用ストリームであることに注意してください。

于 2012-09-11T07:06:10.347 に答える