今天在使用ajax
发送请求的时候遇到了一点问题,就是跨域。显然这就是需要用到JSONP
了。
使用的是Jquery
来完成的AJAX
请求
$.getJSON('url?jsoncallback=?', {
categoryId: "1",
}, function (data) {});
js
大致就是这个样子。
主要的是后台传输数据的格式变化。
比较一下 ajax
返回json
和jsonp
的格式:
{"message":"success", "code":"200","result":{"name":"test","id":1,"description":"11"}}
jsonp
返回的格式:
callback({"message":"success", "code":"200","result":{"name":"test","id":1,"description":"11"}})
在url
中callback
传到后台的参数是什么,callback
就是什么, jsonp
比json
外面有多了一层callback()
。
既然返回的数据结构有区别,那么后台的提供服务的方法也是要发生变化的。我使用的方法就是在HttpServletResponse
中进行操作。
String value = callback + "(" + JSON.toJSONString(result) + ")";
HttpServletResponse.getOutputStream().write(value.getBytes("UTF-8"));
直接写到response
中,然后前台正常操作。
关于json和jsonp之间的关系与区别 这篇文章讲的很不错。