Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.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/87.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响应头包含“JSON.parse”时,jQuery中的JSON.parse失败;应用程序/json“;_Php_Jquery_Ajax_Json_Http Headers - Fatal编程技术网

当PHP响应头包含“JSON.parse”时,jQuery中的JSON.parse失败;应用程序/json“;

当PHP响应头包含“JSON.parse”时,jQuery中的JSON.parse失败;应用程序/json“;,php,jquery,ajax,json,http-headers,Php,Jquery,Ajax,Json,Http Headers,我想弄明白这件事,有点头疼。要通过Ajax从PHP脚本请求一些json数据,我使用jQuery函数: $.ajax({ type: 'GET', cache: 'false', url: ajaxUrl, data: dataString, success: updatePage }); 如果我没有将PHP标题中的内容类型设置为: header('Content-type: application/json'); 然后,我的服务器响应如下所示: {"c

我想弄明白这件事,有点头疼。要通过Ajax从PHP脚本请求一些json数据,我使用jQuery函数:

$.ajax({
    type: 'GET',
    cache: 'false',
    url: ajaxUrl,
    data: dataString,
    success: updatePage
});
如果我没有将PHP标题中的内容类型设置为:

header('Content-type: application/json');
然后,我的服务器响应如下所示:

{"content":"new content"}
并且内容类型会自动设置为text/html。当jQueryAjax选项中的数据类型未设置时,它使用默认的“智能猜测”。我强烈假设jQuery将响应数据识别为json,因为updatePage解析为一个对象。updatePage使用JSON js库(json2.js),并执行以下操作:

function updatePage(data) {
  $dataObj = JSON.parse(data); 
}
当ajax成功调用该函数时,一切正常。没有错误。 奇怪的是,如果我像上面那样将头设置为application/json,json.parse会突然报告一个错误。如果在jQueryAjax请求中将数据类型设置为“json”,则会发生完全相同的错误。更改这些内容时,我从PHP脚本得到的响应与上面的完全相同。Firebug中的错误如下所示:

JSON.parse
  $dataObj = JSON.parse(data); 

有点长,对不起,但如果有人知道是什么问题,他们的帮助是非常感谢。谢谢您的时间。

这是因为您最终尝试双重解析返回值

显式的
json
数据类型和
application/json
MIME类型的使用都会导致jQuery将返回的字符串解析为JavaScript对象


因此,在这些情况下,使用
JSON.parse()
是多余的。

我不理解(甚至看不到)错误…我建议使用console.log(数据)转储来自服务器的内容。。。看看它看起来是否不同。您发布的错误不是很有启发性。呈现的Dancrumb:Object{content=“content”:“new content”}JSON.parse[在此错误上中断]$dataObj=JSON.parse(数据);没什么帮助哦,亲爱的上帝,你是绝对正确的,真不敢相信我错过了那一次。谢谢我明白了,伙计。有时你所需要的只是一双眼睛。