应用场景:无法通过普通的ajax请求获取跨域的json数据。
解决方法:
方法一:
script标签的src属性可以跨域,通过返回一个类似于funName("result")的js,即可通过前端的funName方法获取返回的数据“result”。这种情况下的js为:
$(function(){
$("head").append("<script src='http://localhost:8080/index/getData2?callback=fun1'><\/script>");
})
相应的在服务器端需要使用传来的callback参数将要返回的数据包裹起来,包裹的方法有两种:
1.手动拼接字符串,代码为:
//这里的callback对应着上面js中的fun1,要求前端存在fun1函数来接收返回值
String result1 = callback+"({\"a\":{\"b\":{\"c\":\"1.json\"}}})";
2.使用Spring框架提供的MappingJacksonValue类,代码为:
//这里的callback对应着上面js中的fun1,要求前端存在fun1函数来接收返回值
MappingJacksonValue value = new MappingJacksonValue(user);
value.setJsonpFunction(callback);
方法二:
使用jQuery调用跨域服务器获取json数据,使用jsonp技术:
$.ajax({
url: "http://localhost:8080/index/getData2",
type: "GET",
dataType: "jsonp", //指定为jsonp
success: function (data) {
var result = JSON.stringify(data); //json对象转成字符串
console.log(data);
console.log(result)
}
});
在服务器端不需要任何修改,像正常情况下使用@ResponseBody注解返回为json即可。