跨域请求京东接口

来源:互联网 发布:php远程授权 编辑:程序博客网 时间:2024/05/12 02:09

我们服务器上项目链接:

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


这个活无比煎熬,因客户总改需要,再加之跨域请求,上到京东服务器时,由于 两个服务器之间调用,也存在一些问题。

端午节三天假,我两天都在加班抓狂


0 0
原创粉丝点击