Javascript 如何检索AMD的XHR响应代码(+;时间戳)';道场?

Javascript 如何检索AMD的XHR响应代码(+;时间戳)';道场?,javascript,dojo,xmlhttprequest,Javascript,Dojo,Xmlhttprequest,使用“旧”Dojo,可以将第二个参数ioargs传递给Xhr请求()的load函数。此ioargs提供了请求的时间戳和状态代码(以及其他内容) 但是,我如何使用新的“更干净”(且向前兼容)的Dojo实现这一点呢? 不幸的是,我在报告中找不到任何提示 下面应该是上面提到的“新”Dojo示例的一个端口。但是,ioargs将是未定义的: require(“dojo/request/xhr”、“dojo/dom”、“dojo/domReady!”, 函数(请求、dom){ //查找我们将粘贴文本的节点。

使用“旧”Dojo,可以将第二个参数
ioargs
传递给Xhr请求()的
load
函数。此
ioargs
提供了请求的时间戳和状态代码(以及其他内容)

但是,我如何使用新的“更干净”(且向前兼容)的Dojo实现这一点呢?
不幸的是,我在报告中找不到任何提示

下面应该是上面提到的“新”Dojo示例的一个端口。但是,
ioargs
将是未定义的:

require(“dojo/request/xhr”、“dojo/dom”、“dojo/domReady!”,
函数(请求、dom){
//查找我们将粘贴文本的节点。
var targetNode=dom.byId(“getLicenseStatus”);
//要传递给xhrGet的参数、url、如何处理它以及回调。
请求(
“{{dataUrl}}dojo/LICENSE”,
{
handleAs:“文本”,
预防缓存:正确
}
).那么(
函数(数据、ioargs){
//修复:ioargs未定义
targetNode.innerHTML=“XHR返回HTTP状态:”+ioargs.XHR.status;
},
函数(错误){
targetNode.innerHTML=“发生意外错误:“+error.response.status+”:“+error.response.text;
}
);
}
);

要使请求的时间戳和状态代码在加载函数中可用,我需要更改什么?

请求
返回一个特殊的
承诺
():

从dojo/request调用返回的承诺具有标准承诺上不可用的附加属性:response。此属性承诺将解析为更详细地描述响应的冻结对象(如果可用):

  • url–用于发出请求的最终url(附加查询字符串)
  • 选项–用于发出请求的选项对象
  • text–响应中数据的字符串表示形式
  • 数据–响应中处理的数据(如果指定了handleAs)
  • getHeader(headerName)–从请求中获取头的函数;如果提供程序不提供头信息,此函数将返回null
因此,您应该将
。然后
链接到此
promise.response
以访问上述所有属性:

var promise = request.get("{{dataUrl}}dojo/LICENSE");

promise.response.then(function(response) {
    console.log("status", response.status);
    console.log("url", response.url);
    console.log("data", response.data);
});

参见JSFIDLE上的一个工作示例:

request.get()产生的延迟是否将信息存储在内部?
request.get()
产生一个
promise
对象(正如@Kniganapolke所述)。除了一些函数定义和原型构造函数之外,我找不到任何数据。谢谢。检索状态可以很好地解决这个问题。虽然不可能获取请求的时间戳,对吧?看起来不是这样,但是您可以将
时间戳:(new Date()).valueOf()添加到请求选项中,然后您将在
响应.options.timestamp
中找到它(请参阅更新的jsFiddle)。或者考虑<代码>请求/注册表<代码>,在每一个请求中为您做这件事。这也帮助了我。谢谢。响应对象不仅具有上述属性(url、选项等),而且还有一个xhr属性,它引用了底层的XMLHttpRequest对象。