注意:我不考慮這是Drupal問題,所以我將它張貼在SO上。Firefox/Opera中的JSON輸出爲null,在Chrome中正確
我們創建了一個應該返回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"
,Content Length
,,所以我確信沒有單個非ASCII字符。但是,Firefox顯示內容長度爲的null
。 - 做一個
wget
給我所有的JSON正確的內容。因爲我比wget更信任wget,所以我認爲它不是Drupal/.htaccess問題。 - 根據jsonlint.com,JSON格式良好,並且由於PHP函數進行了轉換,所以我認爲它是非常合適的。
- 其他像權限(每個人都被允許訪問頁面)或編碼(發送UTF-8)的東西不會改變結果。
- 這不是jQuery /跨域相關,因爲我只是想在瀏覽器中調用URL並希望看到JSON響應。
- 在具有相同(Drupal)設置的另一臺機器上,結果是相同的。
- 我能夠從與Drupal設置無關的其他目錄中返回JSON。但由於我只是做了一個
json_encode
,我繞過Drupal的每一個可能的輸出,並且自wget
起作用,它與Drupal IMO無關。根據意見- 內容類型
更新是
application/json
與正確的編碼信息。將其更改爲text/html或其他內容不會改變任何內容。使用header
以及Drupal功能來設置標題。 - 我確信repsonse是正確的,因爲我用Firebug進行了檢查。
ini_set('default_charset', 'UTF-8');
不會更改任何內容,因爲我已經在標題內提交了此信息。從Firefox
響應頭與螢火蟲
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
雖然鉻示出了正確的(合式)JSON輸出,火狐(和也在Opera中測試)僅顯示null
,即使是最簡單的字符串,如"USA"
。
嘗試設置響應報頭類型的應用程序/ JSON –
什麼'內容type'頭你在設置PHP的輸出? –
而你並沒有這麼說,但你是否真的檢查過Firebug或Firefox網絡控制檯中的HTTP響應? –