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

本文详细解析了如何使用JSONP进行跨域访问请求,并遇到200状态码但进入error方法的原因,主要关注于JSONP的正确使用方式、错误处理以及后端配合的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

欢迎留言讨论。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值