2013-06-11 98 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