使用jsonp跨域访问请求为200,但进入error方法

使用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+")";
    }

欢迎留言讨论。

猜你喜欢

转载自blog.csdn.net/zhangjingao/article/details/81673189