跨域請求京東接口

我們服務器上項目鏈接:

http://sk2shop.moxz.cn/

http://sk2shop.moxz.cn/index1.html


京東服務器鏈接:

http://wqs.jd.com/promote/third/sk2shop2

http://wqs.jd.com/promote/third/sk2shop2/index1.html


京東提供的接口如下: 

http://wq.jd.com/activeapi/opensendcouponapi?biz=bizname&cert=xxxxxx&returl=xxxxxx

前端需要在請求的接口返回的鏈接中,獲取ret狀態值(根據不同的狀態值,提示不同的信息),及定義returl返回頁面;


遇到問題

1.跨域請求,jsonp問題;

    $.ajax({
        url:'src',
        type:'get',
        async : false,
        dataType:'jsonp',
        jsonpCallback:'jdcard',
        success:jdcard
    });

function jdcard(data){
 var url;
    if(data.code == 200){
        url = data.url;
        $.cookie("clicc","y");
        location.href =url;
    }
}

標紅的三項需特別注意:

a. asnyc:true(默認)  異步方式,當ajax發送請求後,兩個線程同時執行。

async:false;  同步執行。

b.當dataType:'jsonp',的情況下cache默認爲false,jquery1.2以上新功能。

cache的作用就是第一次請求完畢之後,如果再次去請求,可以直接從緩存裏面讀取而不是再到服務器端讀取。

c.jsonpCallback:'jsonCallback'(默認情況下這麼寫),jsonpCallback是實現跨域請求時定義回調函數用的。如果不涉及到跨域請求可以不寫。

jsonpCallback的值可以根據後臺傳的或者自定義的去寫,比如上邊寫的 jsonpCallback:'jdcard'

d.success方法是所有的請求都請求完畢後執行的。


2.請求完成後再次刷新頁面時,還是彈窗怎麼辦?

//此時頁面返回鏈接爲:http://sk2shop.moxz.cn/?ret=0&retmsg=oijewiofj


截取url,並獲取某個參數的方法(我們這技術大牛寫的,膩害):

var str = location.search, ret;
str=str.replace(/^\?/,'').split('&');
for (var i = str.length - 1; i >= 0; i--) {
    if(str[i].match(/^ret/g)){
        ret = str[0].split('=');
        ret = ret[1];
        break;
    }
}

location.search是截取link鏈接後的拼接參數,如本鏈接爲:http://sk2shop.moxz.cn/?ret=0&retmsg=oijewiofj

那麼location.search後獲取的值爲:?ret=0&retmsg=oijewiofj

然後利用正則進行匹配。最後得到ret值。


if(location.href.indexOf("?") != -1){
        $(".loading").hide();
        if(ret == 0){
            $(".coupon").html("領取成功(領取成功,請到京東賬戶內查看)");
        }

  }

因爲當前ret值已經存在,所以刷新頁面時會再執行一次彈窗方法,即使封裝在function裏也同樣會執行。

然。。研究半天,最後想出來了第一次請求時給個cookie值,每打開頁面時判斷cookie值是否存在。

想法有了,但實現也並非那麼容易



接下來是苦b的探索過程。

最後找到個好方法,判斷頁面是否第一次打開,然後將cookie存儲起來:

var urlf=window.location.href;//獲取當前的URL
urlf=urlf.replace(/[^a-z0-9]/gi,"");//用正則清除字符串中的所有非字母和數字的內容
if($.cookie(urlf)=="" || $.cookie(urlf)==null){

   alert("第一次找開");
   $.cookie(urlf,"y");
}else{

   alert("已經打開過");
   $.cookie(urlf,"n"); 
}


這個活無比煎熬,因客戶總改需要,再加之跨域請求,上到京東服務器時,由於 兩個服務器之間調用,也存在一些問題。

端午節三天假,我兩天都在加班抓狂


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章