鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ getJSON跨域傳參失敗

getJSON跨域傳參失敗

/*$.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這個參數(shù),傳參的時(shí)候一般都在url后面以這樣的格式傳參{id:'1111'},一切正常,但是后期需要在url后面添加wisdomKey這個參數(shù)我發(fā)現(xiàn)getJSON就不好用了,但是使用ajax以上述格式書寫卻可以正常請求的數(shù)據(jù),請問這是為什么呢?

PS:
(1)getJSON URL后面添加?callback=可以實(shí)現(xiàn)跨域請求
(2)項(xiàng)目開始之前就跟后端溝通好了,所以不存在后端不支持的情況
(3)wisdomKey的值是sys_auto_authenticate=true&sys_token=20171114115229565011837222411089
(4)使用getJSON請求控制臺的報(bào)錯信息
圖片描述

回答
編輯回答
孤客

getJSON是用get方式發(fā)起一個dataType:json的請求.
dataType:jsonp是用jsonp發(fā)起一個請求.
兩者是不一樣的.jsonp因?yàn)椴淮嬖诳缬騿栴},所以能直接請求到. 但是getJSON得先允許跨域了才能訪問

2018年1月4日 09:39
編輯回答
只愛你

我這兩天剛用了一下這個jq的jsonp,jsonp是用于get請求的,我看你是post請求, 其實(shí)直接參數(shù)中用data: {test: 111}來傳參數(shù)就好了,正常已經(jīng)能請求成功,如果有解析失敗的情況,可能是后端不支持jsonp,后端返回格式應(yīng)為 jsonp({ret: true})

多說一句:?問號后面的參數(shù)一般用于get請求,除非你有特殊用途,post請求需要用data的方式傳參,而且post請求據(jù)我了解不支持jsonp

2018年9月20日 21:07
編輯回答
莓森

看了一下getJSON的源碼

//getJSON
    function (url, data, callback) {
        return jQuery.get(url, data, callback, "json");//這里,強(qiáng)制了JSON,沒分用getJSON來調(diào)用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 在調(diào)用get的時(shí)候,第四個參數(shù)強(qiáng)制了'json',所以沒有辦法用getJSON來調(diào)用JSONP的,直接用 $.ajax吧

====更新分割線,原來是我誤會樓主的意思了
jquery 的$.ajax 要害死多少人啊,
再說一次,簡單的把 dataType:"jsonp", 改成這樣是行不通的,
JSONP 和 JSON完全是兩回事,
你把dataType改成 jsonp 也得要后端支持返回JSONP才行,不是簡單的改個參數(shù)就可以了

我現(xiàn)在有點(diǎn)理解為什么 axios 不支持JSONP了

2018年6月1日 08:48