zepto跨域ajax无法带cookie的问题

在A域的代码中,用zepto的ajax方法去向B域请求数据。同时,我们希望把B域的cookie也随请求带过去,代码如下

$.ajax({
    url: 'B',
    type: 'GET',
    xhrFields: {
        withCredentials: true
    }
});

withCredentials这个参数是为了让XMLHttpRequest发起跨域请求的时候,能带上目标域的cookie。

这在使用jquery的时候并没有问题,但是使用zepto的时候,发现cookie并没有被带上。

在官方文档中,关于ajax的部分是这样写的


xhrFields (default: none): an object containing properties to be copied over verbatim to the XMLHttpRequest instance. v1.1+

意思是可以在options里面设置xhrFields的相关属性,比如上面提到的withCredentials。值得注意的是,后面标注了实现版本是1.1+。我们目前使用的是1.1.1,按理说应该是支持的。

在反复尝试后,cookie依然无法带过去,所以只能通过看源码解决了。确认下是否真的实现了这个属性。

下面是1.1-stable的版本:

zepto-ajax-1.1-stable

在代码中,搜索xhrFields,发现只有如下一处与之相关


 if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]

此处xhrField是通过setting对象带进来的,而setting对象是在ajaxBeforeSend方法中传入的,所以跟ajax初始化时的options参数并没有关系。

所以得出的结论是zepto库的ajax模块中,并没有实现与文档相匹配的options的xhrFields属性,如果要达到带cookie的效果,只能通过下面代码解决

    $.ajaxSettings.beforeSend = function(xhr) {
        // see https://github.com/madrobby/zepto/issues/274
        xhr.withCredentials = true;  // TODO(elsigh): Do this in zepto w/ xhrFields.
    };

顺便查看了一下1.2.0版本ajax模块的代码,也没有实现通过options设置xhrFields的功能。。。

原文出处:http://www.foreverpx.cn

转载请注明出处。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值