簡體   English   中英

PHP響應的JavaScript JSON解析

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM