2015-06-01 3 views
2

В документации по API Dojo я могу найти обратные вызовы для load и error, но у меня нет обратного вызова для progress.dojo xhrPost progress (callback) прослушиватель событий?

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) {...} 

Имеет додзё какой-то механизм, похожий на XMLHttpRequest API?

+0

Посмотрите на [dojo.xhr] (http://dojotoolkit.org/reference-guide/1.10/dojo/ request/xhr.html). В нем упоминается, как можно обработать событие прогресса, только если браузер поддерживает эти события. – frank

+0

Где вы нашли документацию для xhrPost? Это устаревший API, и я больше не могу его найти. – Leftium

+0

@Leftium: О да, вы правы. xhrPost устарел http://dojotoolkit.org/reference-guide/1.10/dojo/xhrPost.html#dojo-xhrpost-supported-object-properties. Благодарю. –

ответ

1

новыйdojo/request модуль поддерживает ход событий. Он автоматически вызовет новый модуль dojo/xhr на платформах браузера.

Не путайте эти API со старыми, устаревшими, аналогами. Есть ключевые различия в том, как модули включены и называется:

  1. Различные файлы должны быть включены в иной форме (AMD вместо require(dojo.*))
  2. методы должны называться по-разному, и возвращать различные типы. Новый API запросов использует обещания вместо обратных вызовов.

Используйте следующие направляющие для преобразования кода в новом API (может потребоваться обновление до более поздней версии Dojo):


обновление: Если вы должны использовать Dojo 1.6 ...

У вас есть два варианта:

  1. использовать более современные додзё рядом с Dojo 1.6 только для той части, которая нуждается в progress события. Новая архитектура AMD означает, что новая библиотека изолирована от блока обратного вызова require().Архитектура AMD также означает, что вы можете загружать только минимальные части современного Dojo, необходимые для нового xhr.
  2. Backport the progress Функция события Dojo 1.6. Вы можете добавить еще один обратный вызов и code doesn't seem that complex. (Не забывайте учитывать различия, потому что вы не используете обещания.)
+0

Спасибо за ваш ответ (и две полезные ссылки). У меня есть одна большая проблема, на данный момент мне приходится иметь дело с доджо 1.6 :( –

+0

@GeorgKastenhofer: Это слишком плохо ... Я обновил свой ответ с некоторыми предложениями для вас. – Leftium

+0

Спасибо за ваше дальнейшее расследование. Надеюсь, что мы обновим наш сервер в следующем месяце, иначе я буду следовать одному из ваших советов. –

1

Посмотрите на документ dojo/xhr. В нем упоминается, как можно обработать событие прогресса, только если браузер поддерживает эти события.

Ниже приведен фрагмент кода из документации.

додзё/запрос/XHR() возвращает обещание, что выполняется с обрабатываемых данных ответа. Ошибки будут направлены на ошибку, если они предусмотрены. Прогресс данные будут переданы обработчику хода , если он предоставлен, и если браузер поддерживает 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 
    }); 
}); 
+0

Спасибо за ваш ответ. У меня есть одна большая проблема, на данный момент мне приходится иметь дело с dojo 1.6 :( –

Смежные вопросы