2013-06-11 95 views
1

我在通過AJAX發佈JSON時遇到了麻煩。通過AJAX強調問題發佈JSON

出於測試目的,下面的代碼重新產生問題,而在Firefox的便籤創建(我使用骨幹在應用層):

var xhr = new XMLHttpRequest(); 
xhr.open("POST", "/my/api/url"); // could be PUT too 
xhr.setRequestHeader("Content-Type", "application/json"); 
xhr.send(JSON.stringify({ test: "é" })); 

其實,不管是什麼口音的字符串我在我的JSON中使用,它總是發送不正確(我已經在Firefox和Chrome中進行了測試,都是最新版本) - 我可以在Chrome DevTools/Firebug中看到請求數據錯誤。在這種情況下發送的是é

我在Java中找到了解決方法。我不會打擾一次或兩次使用它,但是,看起來情況並非如此。還有很多事情要做。
解決方法如下:

test = new String(test.getBytes("ISO-8859-1"), "UTF-8"); 

任何進一步的幫助,將不勝感激。

我的設置(如果有人需要):

  • Windows 7的64位
  • JDK 1.7 x64的
  • 的JBoss 4.2.3
  • 的RESTEasy
  • 的MyEclipse 9.1

我當他們出現時,經常會用有趣的數據來更新這個問題。

+0

,你能否告訴我們,讓你'A中的代碼© '? JSON不關心字符編碼,它只是發送字節。 – Halcyon

+0

我直接在Firefox Scratchpad中完成了該代碼。 – gustavohenke

+0

你的IDE /編輯器有哪些字符集? – bpoiss

回答

0

我已經解決我自己的問題。當我使用RESTEasy時,我的一個方法是使用攔截器MessageBodyReader。在這個類中,我讀身體沒有使用請求的編碼......

那句話:

String body = new String(IOUtils.toByteArray(inputStream)); 

成爲:

String body = new String(IOUtils.toByteArray(inputStream), request.getCharacterEncoding()); 
0

你是不是傳遞JSON正確

xhr.send(JSON.stringify({ test: "é" }));

也應該有一個關鍵qoutes這樣{ "test": "e" }

變量

var jsonStr={ "test": "é" }; 
xhr.send(JSON.stringify(jsonStr)); 

我不認爲你可以使用你需要對json進行字符串化,因爲你已經將Content-Type設置爲json,但是不確定。

希望它可以幫助你......

嘗試發送參數這樣

var params='json='+jsonStr; 
xhr.send(params); 
+0

對不起,但沒有幫助。一切正常,JSON被服務器正確解析。我可以調試它,看看會發生什麼奇怪的字符。 – gustavohenke