Ajax使用Accents调用麻烦

时间:2017-09-11 08:25:50

标签: java jquery ajax spring-mvc

我在我的ajax调用中尝试了以下行,因为它是在互联网上建议的:

  

contentType:“application / json; charset = ISO-8859-1”

但它没有改变任何东西。每当我用ajax调用带有重音的字符串参数(例如società),在我的控制器(我使用Java,弹簧框架)时,我会收到SocietÃ。我已经尝试了第一个UTF-8,这是默认的(据我所知),但没有。这是我的全部功能:

function foo(customer, society) {
    $.ajax({
        url: 'notMappedAcoStaffing.do',
        type: "GET",
        contentType: "application/json; charset=ISO-8859-1",  
        data: { customer: customer, society: society},
        success: function(data) {   $('#content').html(data);    },
        error: function(error) { alert("error" + error); }
    });
}

我将后端的值视为

@RequestMapping(method = RequestMethod.GET)
public ModelAndView fooController(@RequestParam("customer") final String customerParam, @RequestParam(value="society",required=false) Integer societyParam) {...}

有没有办法解决这个问题? 感谢您的帮助。

更新:我仍然不知道为什么我在控制器上收到它作为参数失真的原因。但是当我按照以下方式转换它时:How do I convert between ISO-8859-1 and UTF-8 in Java?,它一切都很好。看到它有效,我再次尝试在我的ajax调用中设置UTF-8但没有成功......它解决了我的问题但老实说我不喜欢这样。如果您在ajax呼叫方面有更好的解决方案,请与我分享。感谢

1 个答案:

答案 0 :(得分:1)

您的部分问题是您正在使用HTTP GET,这基本上意味着您的数据将嵌入到URL本身的查询字符串(http://example.org/?customer=foo&society=bar)中。使用特殊字符时可能会出现问题。

特别是,contentType属性涉及您根本没有的请求的正文,因此目前影响不大。

考虑使用HTTP POST发送数据(并删除您的自定义contentType),这会为您提供更强大的数据编码功能 - 然后在请求正文中发送,而不是在URL中发送。它可能会彻底解决您的问题,或者您可能需要将服务器配置为使用与客户端相同的编码   - 我建议双方使用UTF-8。