2010-08-27 46 views
1

我正在動態創建一個JSON對象,當我通過ajax POST發送它時,我得到不允許的關鍵字符作爲響應。我知道我的對象是可以的,因爲我可以手動創建相同的對象,並且它發送正常。在將所有字符串添加到obj之前,我嘗試了所有字符串escape(),但這也不起作用。不允許的關鍵字符ajax響應

我錯過了什麼嗎?

這是我的職位

$.ajax({ 
    type: 'POST', 

    url: 'http://localhost/test', 
    data: obj, 
    dataType : 'JSON', 
    success: function(){ 
     console.log('nice'); 
    } 
}); 

我現在用的是相同的obj在這個崗位

Add to JSON without knowing its structure

+0

檢查頁面編碼 – BrunoLM 2010-08-27 01:59:51

+1

請提供一個示例以及您正在使用的解析器。 – Zepplock 2010-08-27 02:04:10

+0

添加了調用和obj的示例。我的頁面沒有任何編碼b/c它被髮送到一個php腳本。 – Mike 2010-08-27 02:12:36

回答

0

事實證明,這個錯誤是由CI的輸入庫造成的。在第215行,你會發現_clean_input_keys函數,它使用preg_match()來禁止你的鍵中的某些字符。所以,當你發送JSON並且php將它作爲一個數組接收時,它可能會引發錯誤。

要解決此問題,您可以擴展庫或編輯CI內核。

+0

延伸到什麼?你的解決方案是什麼? – HGPB 2013-04-09 19:42:46

2

您網頁的編碼可能是不匹配的,這意味着響應可以拿出一些無效字符,例如:

ÿ¬{"Result":"A"} 

您需要確保您發佈的編碼與另一側的編碼匹配。

+0

我只是試圖將JSON發佈到與現在運氣相同的頁面,所以我不認爲這是問題所在。 – Mike 2010-08-27 02:37:17

+0

我剛纔意識到我的鑰匙裏有空格......有沒有辦法繞過那個? – Mike 2010-08-27 02:40:55

+0

您是否將文件保存爲UTF-8?我遇到過這樣的問題,試着用ANSI保存。如果它仍然不起作用,那麼我猜這是另一回事。 – BrunoLM 2010-08-27 02:42:49

2

我才意識到,我的鑰匙在他們的空間

是啊...你要連接到該網站可能運行笨。

CI具有一些啞輸入「清理」功能,故意拒絕所有帶有空格的表單參數(或字母數字以外的任何形式參數和.-/:)。

+0

你猜對了,有什麼方法可以解決這個問題。我有權訪問我正在連接的網站... – Mike 2010-08-27 03:09:24

+0

CodeIgniter的'libraries/Input.php'中不會破解'_clean_input_keys'。整個'_clean_input_data'確實值得懷疑;反XSS是完全假的,如果啓用(希望不是),它不能清理你可能真正想要的東西,如控制代碼或非UTF-8序列。 – bobince 2010-08-27 11:50:45