2015-05-02 52 views
0

我最近開始翻譯舊的Classic ASP網站到PHP。它的幾個頁面(Response.ContentType = "application/json")只會服務JSON響應,如{"R":1}和一切工作正常。PHP JSON到AJAX不被解析 - JSON格式正確

現在在PHP上,header("content-type:application/json")代碼的第一件事,ajax只是不會解析它。客戶端JS代碼與我之前使用的代碼相同。我甚至沒有碰過它。

$.ajax({ 
    dataType: "json", 
    type : "POST", 
    url: "processthisrequest.php", 
    cache: false, 
    async: false, 
    data: { Field1:"bla", Field2:"blabla"}, 
    error: function(data){ 
     // code on error 
    }, 
    success: function(json){ 
     // code on success 
    } 
}); 
如果請求被接受的所有它服務

{"R":1}用雙引號,因爲它一直都是。

無論發生什麼,Ajax都會觸發錯誤功能。嘗試調試它,我發現這一點:

readyState:4 
responseText:{"R":1} 
status:200 
statusText:OK 

尋求幫助,我發現很多人有問題,阿賈克斯獲得的readyState:4,狀態:200和反應仍然沒有被解析。沒有解決方案適用於我的問題。

因爲它與IIS/ASP一起工作,它可以與Apache或PHP的東西?

UPDATE: 仍然沒有成功,但如果我的服務器服務於的.js文件{"R":1},而不是通過處理一個PHP頁面的Ajax響應將觸發成功的功能。這隻能證明我的觀點,即這是一個PHP問題,也解釋了爲什麼它使用老恐龍ASP。現在爲什麼PHP沒有提供適當的MIME類型是我想弄明白的。

+0

如果將'console.log(data);'添加到錯誤函數中,您會在控制檯中獲得什麼? – AlliterativeAlice

+0

readyState:4,responseText:「{」R「:1}」,狀態:200,statusText:「確定」並且對所有其他屬性起作用。 –

+0

嘗試將'dataType'參數更改爲'text'並查看是否調用成功。 – AlliterativeAlice

回答

0

我整理了它。

PHP有一些非常奇怪的做事方式。 右後header("Content-Type: application/json")線我有一個include "file.php"。雖然處理Ajax請求和包含文件的文件都保存爲Unicode一個有BOM簽名,另一個沒有。

處理這兩個文件使得PHP向瀏覽器發送「某些東西」,這個東西只是一個合適的application/json響應,它不允許Ajax解析它。

我知道我應該留在這裏,但我非常沮喪,我需要添加此評論:在我浪費了將近18個小時的時間之後,我可以使用其他方法工作,我只能從這個經驗中學到一點,那就是免費軟件根本不是免費的。