注意:我不认为这是Drupal问题,所以我在这里发布它。
我们创建了一个应该返回JSON的Drupal模块。例如。调用/ foo / json返回JSON。这在Chrome中都很好。但是,Firefox只显示“null”。
JSON的内容只是一个PHP数组,其中包含一些用循环填充的信息
$someArray = array();
foreach(....) {
$someArray[] = array("foo" => "bar", ...);
}
echo json_encode($someArray);
到目前为止,我知道
$someArray[0]["some_key"]
中的单个元素,Chrome会显示"USA"
5 的Content Length
,所以我确信没有一个非元素ASCII字符。但是,Firefox会显示null
,其内容长度为 4 。wget
给了我所有JSON的正确内容。由于我比浏览器更信任wget,我认为它不是Drupal / .htaccess问题。json_encode
,所以我绕过了Drupal的每一个可能的输出,因为wget
起作用,我与Drupal IMO无关。根据评论进行更新
application/json
,其中包含正确的编码信息。将其更改为text / html或其他内容不会改变任何内容。同时使用header
和Drupal函数来设置标题。null
回复是正确的,因为我用Firebug进行了检查。ini_set('default_charset', 'UTF-8');
不会更改任何内容,因为我已经在标题中提交了此信息。Firefox与Firebug的响应标头
Cache-Control no-cache, must-revalidate, post-check=0, pre-check=0
Connection Keep-Alive
Content-Language en
Content-Length 4
Content-Type application/json; charset=utf-8
Date Mon, 03 Sep 2012 12:16:58 GMT
Etag "1346674618"
Expires Sun, 19 Nov 1978 05:00:00 GMT
Keep-Alive timeout=5, max=100
Last-Modified Mon, 03 Sep 2012 12:16:58 +0000
Server Apache/2.2.22 (Ubuntu)
X-Powered-By PHP/5.3.10-1ubuntu3.2
请求标题
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.7,de;q=0.3
Connection keep-alive
Cookie has_js=1; respimg_ratio=1; respimg=1000 //Drupal information
Host vie.local
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0
TL; DR
虽然Chrome显示正确(格式正确)的JSON输出,但Firefox(在Opera中也经过测试)只显示null
,即使是最简单的字符串"USA"
也是如此。
答案 0 :(得分:1)
问题是Firefox不知何故没有向服务器发送正确的语言。我不知道是通过cookie还是在标题内。由于我对输出使用了语言感知过滤,因此从未返回输出。
因此,禁用语言过滤器可以解决问题。我不知道为什么Firefox有这种语言的问题,但这解决了这个问题。
答案 1 :(得分:0)
正如我在评论中所说,可能存在如何将json响应发送回浏览器的问题
这不是编码问题。如果我只返回$ someArray [0] [“some_key”]中的单个元素,Chrome会显示内容长度为5的“USA”,所以我确信没有一个非ASCII字符。但是,Firefox显示null,内容长度为4.
null返回内容长度为4
美国的内容长度为5?为什么?美国只有3个字符
检查响应之前或之后的白色间距
答案 2 :(得分:0)
将json文件发送到XMLHttpRequest的标头中
$json_string = file_get_contents("path/well_formated.json");
使用
header("header_name: $json_string"));
无法使用FF和
header("header_name:". json_encode($json_string));
全部失败
php HEREDOC解决方案
$json_string = file_get_contents("path/well_formated.json");
$h= <<<H
header_name : $json
H;
header($h);
这适用于Chrome,Opera,Firefox,IE