我使用bluebird.js解析jquery ajax请求,并且访问我的请求的http标头非常困难。
示例代码:
Promise.resolve($.get(...)).then(function(data){
//wtb http headers
});
我正在尝试访问我的响应返回的http标头。仅仅根据ajax请求执行此操作很简单,我认为比我聪明的人已经将这一点想象出来了。
答案 0 :(得分:4)
解决此问题的一种方法是保持对jqXHR对象的引用,以便稍后访问:
var jqXHR = $.get(...);
Promise.resolve( jqXHR ).then( function ( data ) {
var headers = jqXHR.getAllResponseHeaders();
} );
答案 1 :(得分:2)
jQuery promises和bluebird promises(符合Promises/A+)之间的一个区别是,then
函数只获得一个参数。如果你想保留jQuery给你的所有信息,你必须把它包装在一个对象中:
Promise.resolve($.get(...).then(function(data, status, xhr) {
return {
data: data,
status: status,
xhr: xhr
};
})).then(function (data) {
// data.data has the response data
// data.xhr contains the jqXHR object
});
答案 2 :(得分:1)
为什么通过保持jQuery,jqXHR作为正式变量可用于成功和错误处理程序,将jqXHR
强制转换为其他Promise?
$.get(...).then(function(data, testStatus, jqXHR) {
var headers = jqXHR.getAllResponseHeaders();
...
}, function(jqXHR, testStatus, errorThrown) {
var headers = jqXHR.getAllResponseHeaders();
...
});
如果出于某种原因你还需要强制jqXHR,那么将整个表达式包装在Promise.resolve(...)
中。 .then()
返回的jQuery承诺与jqXHR一样具有强制性。