getJSON跨域传参失败

发布于 2022-09-06 04:08:11 字数 1186 浏览 17 评论 0

/*$.ajax({
            type:"post",
            url:path+'ws/wisdomclass/getBaseDataInfo?'+wisdomKey,
            dataType:"jsonp",
            success:function(json){
                that.$Loading.finish();
                that.isClassroomreview=json.ws_classroomreview;
            }
        });*/
        
        $.getJSON(path+'ws/wisdomclass/getBaseDataInfo?callback='+wisdomKey,{id:'111'}, function(json, textStatus) {
            console.log(json)
            that.$Loading.finish();
            that.isClassroomreview=json.ws_classroomreview;
        });

最开始使用的getJSON方法向后台请求接口,之前没有wisdomKey这个参数,传参的时候一般都在url后面以这样的格式传参{id:'1111'},一切正常,但是后期需要在url后面添加wisdomKey这个参数我发现getJSON就不好用了,但是使用ajax以上述格式书写却可以正常请求的数据,请问这是为什么呢?

PS:
(1)getJSON URL后面添加?callback=可以实现跨域请求
(2)项目开始之前就跟后端沟通好了,所以不存在后端不支持的情况
(3)wisdomKey的值是sys_auto_authenticate=true&sys_token=20171114115229565011837222411089
(4)使用getJSON请求控制台的报错信息
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

九公里浅绿 2022-09-13 04:08:12

看了一下getJSON的源码

//getJSON
    function (url, data, callback) {
        return jQuery.get(url, data, callback, "json");//这里,强制了JSON,没分用getJSON来调用JSONP
    }
    
    //get
    function (url, data, callback, type) {
        // shift arguments if data argument was omitted
        if (jQuery.isFunction(data)) {
            type = type || callback;
            callback = data;
            data = undefined;
        }
    
        return jQuery.ajax({
            type: method,
            url: url,
            data: data,
            success: callback,
            dataType: type
        });
    }

分析了一下,getJSON 在调用get的时候,第四个参数强制了'json',所以没有办法用getJSON来调用JSONP的,直接用 $.ajax吧

====更新分割线,原来是我误会楼主的意思了
jquery 的$.ajax 要害死多少人啊,
再说一次,简单的把 dataType:"jsonp", 改成这样是行不通的,
JSONP 和 JSON完全是两回事,
你把dataType改成 jsonp 也得要后端支持返回JSONP才行,不是简单的改个参数就可以了

我现在有点理解为什么 axios 不支持JSONP了

日久见人心 2022-09-13 04:08:12

getJSON是用get方式发起一个dataType:json的请求.
dataType:jsonp是用jsonp发起一个请求.
两者是不一样的.jsonp因为不存在跨域问题,所以能直接请求到. 但是getJSON得先允许跨域了才能访问

心意如水 2022-09-13 04:08:12

我这两天刚用了一下这个jq的jsonp,jsonp是用于get请求的,我看你是post请求, 其实直接参数中用data: {test: 111}来传参数就好了,正常已经能请求成功,如果有解析失败的情况,可能是后端不支持jsonp,后端返回格式应为 jsonp({ret: true})

多说一句:?问号后面的参数一般用于get请求,除非你有特殊用途,post请求需要用data的方式传参,而且post请求据我了解不支持jsonp

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文