如何检索AMD'ized道场XHR响应代码(+时间戳)?(How to retrieve X

2019-06-27 11:27发布

与“老”道场一个可以传递第二个参数ioargsload一个XHR请求的功能( 见实施例6在这里 )。 此ioargs提供(除其他外)该请求的时间戳和状态码。

但是,我怎么能与新“清洁”实现这个(向兼容)道场?
不幸的是,我无法找到任何提示当前文档 。

下面列出的是上述参考示例的以“新”道场的端口。 但是, ioargs将是不确定的:

require( "dojo/request/xhr", "dojo/dom", "dojo/domReady!",
  function(request, dom){
    // Look up the node we'll stick the text under.
    var targetNode = dom.byId("getLicenseStatus");

    // The parameters to pass to xhrGet, the url, how to handle it, and the callbacks.
    request.get(
      "{{dataUrl}}dojo/LICENSE",
      {
        handleAs: "text",
        preventCache: true
      }
    ).then(
      function(data, ioargs){
        // FIXME: ioargs is undefined
        targetNode.innerHTML = "XHR returned HTTP status: " + ioargs.xhr.status;
      },
      function(error){
        targetNode.innerHTML = "An unexpected error occurred: " + error.response.status + ": " + error.response.text;
      }
    );
  }
);

我需要做什么改变有请求的负载功能,时间戳和状态代码可用?

Answer 1:

request返回一个特殊promise ( 源 ):

从道场/请求调用返回的承诺有一个附加属性不可用标准的承诺:响应。 此属性将解析冻结对象(如果有的话),说明更详细地回应一个承诺:

  • 网址 - 用来做请求最终URL(查询字符串追加)
  • 选项 - 选择对象使用发出请求
  • 文本 - 在响应中的数据的字符串表示
  • 数据 - 在响应中的处理的数据(如果指定handleAs)
  • getHeader(headerName) - 一个函数来获取从所述请求的报头; 如果供应商不支持头信息,这个函数将返回null。

所以,你应该链.then这个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);
});

看到的jsfiddle工作示例: http://jsfiddle.net/phusick/6wB2L/



文章来源: How to retrieve XHR response code (+timestamp) of AMD'ized Dojo?