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。
答案 0 :(得分:0)
在ajax中设置contentType时,您要为请求设置contentType而不是响应。
它与JSON contentType失败,因为您发送的数据是键/值格式的数据(缺少编码),因此数据与contentType不匹配。 JSON contentType标头适用于您发送没有标识符的原始JSON,但在您的情况下,您有一个标识符hist_json=
。
我建议改为:
data: { hist_json : JSON.stringify(json_hist) },
使用带有hits_json
键的对象意味着jQuery将安全地URL encode JSON,并允许PHP使用$_POST['hits_json']
来获取它。
如果要使用JSON contentType,则必须将ajax更改为:
data: { JSON.stringify(json_hist) }, // <-- no identifier
和PHP:
$obj = json_decode($HTTP_RAW_POST_DATA);
var_dump($obj);
答案 1 :(得分:0)
据我所知,这是FireFox中出现的错误。
您可以在http://bugs.jquery.com/ticket/13758
上阅读更多内容stackoverflow中还有关于它的主题
Cannot set content-type to 'application/json' in jQuery.ajax
答案 2 :(得分:0)
您注释掉的行正在尝试将Content-type:
标题更改为application/json
。虽然您发送的数据是JSON格式,但数据是作为HTTP POST请求传输的,因此您需要使用application/x-www-form-urlencoded;
的内容类型,这是默认值。这就是为什么它适用于删除的行。