加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在Firefox / Opera中JSON输出null,在Chrome中更正

发布时间:2020-12-13 22:44:56 所属栏目:PHP教程 来源:网络整理
导读:注意:我不认为这是Drupal问题,所以我在这里发布它. 我们创建了一个应该返回JSON的Drupal模块.例如.调用/ foo / json返回JSON.这在Chrome中都很好.但是,Firefox只显示“null”. JSON的内容只是一个PHP数组,其中包含一些循环填充的信息 $someArray = array();
注意:我不认为这是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会显示内容长度为5的“USA”,所以我确信没有一个非ASCII字符.但是,Firefox显示null,内容长度为4.
>做一个wget给了我所有JSON的正确内容.由于我比浏览器更信任wget,我认为它不是Drupal / .htaccess问题.
>根据jsonlint.com,JSON格式正确,并且由于PHP函数进行转换,我认为它确实是格式良好的.
>其他东西,如权限(允许每个人访问页面)或编码(发送UTF-8)不会改变结果.
>这不是jQuery /跨域相关的,因为我只想在浏览器中调用URL并希望看到JSON响应.
>在具有相同(Drupal)设置的另一台机器上,结果是相同的.
>我能够从与Drupal设置无关的其他目录返回JSON.但是因为我只是做一个json_encode,所以我绕过了Drupal的每一个可能的输出,因为wget工作,我与Drupal IMO无关.

根据评论更新

> Content-type是带有正确编码信息的application / json.将其更改为text / html或其他内容不会改变任何内容.使用标题和Drupal函数来设置标题.
>我确信null repsonse是正确的,因为我用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中也经过测试)即使对于像“USA”这样的最简单的字符串也只显示null.

解决方法

问题是Firefox不知何故没有向服务器发送正确的语言.我不知道是通过cookie还是在标题内.由于我对输出使用了语言感知过滤,因此从未返回输出.

因此,禁用语言过滤器可以解决问题.我不知道为什么Firefox有这个语言的问题,但这解决了这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读