Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php POST后json返回空值_Php_Jquery_Ajax_Json_Null - Fatal编程技术网

Php POST后json返回空值

Php POST后json返回空值,php,jquery,ajax,json,null,Php,Jquery,Ajax,Json,Null,a、 php 如果我评论 contentType:application/json;字符集=utf-8 一切正常,但如果取消注释。 var dump将返回null。在ajax中设置contentType时,您是在为请求而不是响应设置contentType JSON contentType失败,因为您发送的数据是缺少编码的键/值格式的数据,因此数据与contentType不匹配。JSON contentType头用于发送没有标识符的原始JSON,但在您的情况下,您有一个标识符hist_JSON=

a、 php

如果我评论 contentType:application/json;字符集=utf-8 一切正常,但如果取消注释。
var dump将返回null。

在ajax中设置contentType时,您是在为请求而不是响应设置contentType

JSON contentType失败,因为您发送的数据是缺少编码的键/值格式的数据,因此数据与contentType不匹配。JSON contentType头用于发送没有标识符的原始JSON,但在您的情况下,您有一个标识符hist_JSON=

我建议改为:

data: { hist_json : JSON.stringify(json_hist) },
使用带有hits_json键的对象将意味着jQuery将安全地保存json,并允许PHP使用$\u POST['hits_json']拾取它

如果要使用JSON contentType,则必须将ajax更改为:

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

据我所知,FireFox中出现的是bug

你可以阅读更多关于

stackoverflow中也有关于它的主题


您注释掉的那一行试图将内容类型:header更改为application/json。虽然您发送的数据是JSON格式的,但数据是作为HTTP POST请求传输的,因此您需要使用application/x-www-form-urlencoded;的内容类型;,这是默认值。这就是为什么它可以在删除行的情况下工作。

无需在php文件中提供json_解码。为什么使用数据类型:json?尝试删除它,因为b.php的输出不是jsontanks,但即使我没有在php文件中解码,它在var dump中返回null$历史=json_encode$pro_hist;var json=;我已经编码为json类型。但是为什么我不需要使用数据类型json呢?Thanksdata:{hits_json:json.stringifyjson_hist},contentType:application/json;charset=utf-8,数据类型:json,在firebug中,post数据命中\u json=%7B%22history\u done\u任务%22%3A150%2C%22history\u士气%22%3A150%2C%22history\u日期%22%3A150%2C%22history\u技能\u lv%22%3A150%7D,并且b.php变量转储返回null。请帮助否,您使用的是hist_json标识符,因此不要包含json内容类型。如果您想使用标题,您需要更改ajax和PHP,这意味着我没有在每次发送json时设置内容类型?我想学习最正确的方法。感谢您的帮助,不要发送contentType,因为您的数据不完全是JSON。请看我答案的第二部分。要发送纯JSON,您需要删除hist_JSON标识符,并更改PHP代码。这是否意味着发送JSON的最正确方式不需要设置内容类型?对于您在这里尝试的操作,不要设置内容类型。在这种情况下,我应该设置内容类型?谢谢如果您试图用Ajax上传多个文件,可能需要显式设置内容类型。我想不出有什么场合需要将其设置为application/json。当然,您可能希望为从服务器接收的数据设置数据类型。
data: { hist_json : JSON.stringify(json_hist) },
data: { JSON.stringify(json_hist) }, // <-- no identifier
$obj = json_decode($HTTP_RAW_POST_DATA);
var_dump($obj);