1

a.php

$(document).ready(function() {
    $("#submit_form").on("click",function(){
        var json_hist =  <?php echo $json_history; ?>;
        $.ajax({
            type: "POST",
            url: "b.php",
            data: "hist_json="+JSON.stringify(json_hist),
            //contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data){alert(data);},
            failure: function(errMsg) {
                alert(errMsg);
            }
        });  
    }); 
})

b.php

$obj=json_decode($_POST["hist_json"]);
var_dump($_POST);

コメント するとcontentType: "application/json; charset=utf-8" すべて正常に動作しますが、これをコメント解除すると。var ダンプは null を返します。

4

3 に答える 3

1

ajax で contentType を設定すると、応答ではなく要求の contentType が設定されます。

送信しているデータがキー/値形式のデータ (エンコーディングがない) であり、データが contentType と一致しないため、JSON contentType で失敗します。JSON contentType ヘッダーは、識別子なしで生の JSON を送信する場合に使用しますが、あなたの場合は identifier がありますhist_json=

次のように変更することをお勧めします。

data: { hist_json : JSON.stringify(json_hist) },

キーでオブジェクトを使用することhits_jsonは、jQuery が安全にJSON をURL エンコード$_POST['hits_json']し、PHP がそれを取得できるようにすることを意味します。


JSON contentType を使用する場合は、ajax を次のように変更する必要があります。

data: { JSON.stringify(json_hist) }, // <-- no identifier

そしてPHP:

$obj = json_decode($HTTP_RAW_POST_DATA);
var_dump($obj);
于 2013-07-11T07:43:52.423 に答える
0

コメントアウトした行は、Content-type:ヘッダーをに変更しようとしていapplication/jsonます。送信するデータは JSON 形式ですが、データは HTTP POST 要求として送信されるため、既定のコンテンツ タイプ を使用する必要application/x-www-form-urlencoded;があります。そのため、行を削除して動作します。

于 2013-07-11T07:45:55.787 に答える