[英]Javascript json parsing of php response
我正在研究一個項目,並使用ajax更新表單中的某些信息。
這是我的ajax函數:
function update_ad() {
var project_name = document.getElementById("mol_project").value;
if (project_name !== '') {
$.ajax({
type: 'POST',
url: "controllers/get_project.php",
data: {project_name: project_name},
dataType: 'text',
success: function (data) {
var result = JSON.parse(data);
}
});
}
}
在我的開發環境中,一切正常。 該函數從php服務器獲取json文本並進行解析,因此之后我可以使用數據。
但是在生產環境中,我收到一個解析錯誤:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
這是收到的傑森:
{"project_name":"Jaguar","project_ORB_code":null,"project_manager":null,"project_abbr":"JR","project_mol_index":"2","project_comment":null}
jQuery,apache和php版本在兩個環境中都相同。 我想這是服務器配置問題,但我不知道它在哪里。
好的,在您的JSON中,前面有一個UTF-8 BOM。 您能找到以下兩者之間的區別嗎?
{"project_name":"Jaguar","project_ORB_code":null,"project_manager":null,"project_abbr":"JR","project_mol_index":"2","project_comment":null}
和:
{"project_name":"Jaguar","project_ORB_code":null,"project_manager":null,"project_abbr":"JR","project_mol_index":"2","project_comment":null}
后者是有效的JSON。 使用JSONLint進行檢查。 您需要確保接收到的輸出沒有UTF-8 BOM。
當我嘗試在JSON上使用encodeURI()
函數時,它給出了以下輸出:
encodeURI(' {"pr'); // "%20%EF%BB%BF%7B%22pr" - Wrong one!
encodeURI(' {"pr'); // "%20%7B%22pr" - Correct one!
我們可以利用encodeURI
來檢測異常並在客戶端進行修復。 我正在尋找解決方案。
如果看到的話,unicode簽名是EF BB BF , 本文將對此進行說明 。 我們可以利用此簽名並嘗試對其進行更正。
如果您有權訪問PHP源代碼,請嘗試設置正確的標頭 :
header("Content-type: application/json; charset=utf-8");
將dataType:'text'替換為dataType:json,
查看JSON規范(此處易於理解的版本: http : //json.org/ )。 沒有地方說括號是有效的。 ({“ foo”:true}),例如,永不解析。 由於它是有效的JavaScript,因此可能會被規避,但是javascript不是JSON。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.