dojo xhrPost进度(回调)事件监听器?

时间:2015-06-01 08:09:15

标签: javascript ajax dojo

在dojo API文档中,我可以找到loaderror的回调,但我错过了progress的回调。

load: function(data) {
    dojo.byId("response").innerHTML = "Form posted.";
},
error: function(error) {
    dojo.byId("response").innerHTML = "Error...";
}

XMLHttpRequest API提供了注册progress事件的事件监听器的可能性:

var oReq = new XMLHttpRequest();

oReq.addEventListener("progress", updateProgress, false);

oReq.addEventListener("load", transferComplete, false);

oReq.addEventListener("error", transferFailed, false);

oReq.addEventListener("abort", transferCanceled, false);

oReq.open();

// progress on transfers from the server to the client (downloads)
function updateProgress (oEvent) {...}

dojo是否有一些机制,类似于XMLHttpRequest API?

2 个答案:

答案 0 :(得分:1)

查看dojo/xhr文档。它提到了只有在浏览器支持这些事件时才能处理进度事件。

以下是文档中的代码段。

dojo / request / xhr()会返回一个承诺,并使用响应的已处理数据来实现。如果提供错误,错误将被定向到errback。 进度数据将提供给进度处理程序(如果已提供)以及浏览器是否支持 XHR2进度事件

require(["dojo/request/xhr"], function(xhr){
  xhr("example.json", {
    handleAs: "json"
  }).then(function(data){
    // Do something with the handled data
  }, function(err){
    // Handle the error condition
  }, function(evt){
    // Handle a progress event from the request if the
    // browser supports XHR2
  });
});

答案 1 :(得分:1)

new dojo/request模块支持进度事件。它将自动在浏览器平台上调用新的dojo/xhr模块。

不要将这些API与旧的,已弃用的API混淆。模块的包含和调用方式存在重大差异:

  1. 必须以不同的方式包含不同的文件(AMD而不是RegistrySearch
  2. 必须以不同方式调用方法并返回不同类型。新请求API使用promises而不是回调。
  3. 使用以下指南将代码转换为新API(可能需要更新到更新版本的Dojo):

    更新:如果必须使用Dojo 1.6 ...

    您有两种选择:

    1. 仅对需要require(dojo.*)事件的部分使用Dojo 1.6旁边的更现代的Dojo。新的AMD架构意味着新库与progress回调块隔离。 AMD架构还意味着您只能加载新xhr所需的现代Dojo的最小部分。
    2. require()事件功能反向移植到Dojo 1.6。您可以添加另一个回调和code doesn't seem that complex。 (不要忘记考虑差异,因为你没有使用承诺。)