使用jsonp跨域访问请求为200,但进入error方法
我的情况是:我是用ajax使用jsonp跨域访问后台,response得到后台返回的值了,请求状态也是200,但是就是进入error方法。原因就是没有用callback方法名包裹返回信息。
先了解它:jsonp
JSONP是一种协议,为了解决客户端请求服务器跨域(跨域这事就不解释了)的问题,是实现跨域的一种手段,但是并非是正式的传输协议。该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
所以它的访问还需要后端进行配合。返回的数据需要是callback参数套住真正数据的格式。
形如:
Callback({msg:'this is json data'})
看下正确的代码:
前台:
$("#loginout").click (function (event) {
alert("alert");
$.ajax({
url: "http://future.club:8080/user/loginout",
type: "get",
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
dataType: "jsonp", //指定服务器返回的数据类型
success: function (data) {
alert("success");
},error:function (data) {
alert(data.jqXHR+" "+data.status+" "+data.error);
}
});
});
后台:
/**
* 接受ajax jsonp请求
*/
@GetMapping("/loginout")
@ResponseBody
public String loginOut (HttpServletRequest request) {
//获得callback方法名字
String callbackFuncation = request.getParameter("callback");
String msg = "{msg:'this is json data'}";
//callback方法名包裹真正信息
return callbackFuncation+"("+msg+")";
}
欢迎留言讨论。