Примеры применения функций XHR

Как минимум, в числе аргументов для выполнения запросов XHR должны быть определены адрес URL и функция load. Однако обычно, и это очень правильно, в число аргументов включается еще и обработчик ошибок – не опускайте его, если вы действительно не уверены, что можете обойтись без него. Например:
//...обрезано...
dojo.addOnLoad(function() {
dojo.xhrGet({
url : "someText.html", //относительный URL
// Вызвать эту функцию в случае успеха
load : function(response, ioArgs) {
console.log("successful xhrGet", response, ioArgs);
//Заполнить некоторый элемент содержимым...
dojo.byId("foo").innerHTML= response;
return response; //всегда возвращайте аргумент response
},
// Вызвать эту функцию в случае неудачи
error : function(response, ioArgs) {
console.log("failed xhrGet", response, ioArgs);
/* обработка ошибки... */
return response; //всегда возвращайте аргумент response
}
});
});
//...обрезано...

Совсем необязательно, что вам всегда будет нужен текст в качестве ответа. Иногда может появиться потребность ограничить время ожидания ответа или передать дополнительную информацию в виде строки запроса.


К счастью, это не сильно усложнит вашу жизнь. Просто добавьте несколько параметров, как показано ниже:
dojo.xhrGet({
url : "someJSON.html", //Нечто такое: {’bar’:’baz’}
handleAs : "json", //Преобразовать в объект JavaScript
timeout: 5000, //Вызвать обработчик ошибок через 5 секунд,
//если за это время ответ не будет получен
content: {foo:’bar’}, //Добавить foo=bar в строку запроса
// Вызвать эту функцию в случае успеха
load : function(response, ioArgs) {
console.log("successful xhrGet", request, ioArgs);
console.log(response);
//Значение свойства handleAs предписывает Dojo
//преобразовать данные в объект
dojo.byId("foo").innerHTML= response.bar;
//Отобразит обновленные данные, например 'baz'
return response; //всегда возвращайте аргумент response
},
// Вызвать эту функцию в случае неудачи
error : function(response, ioArgs) {
console.log("failed xhrGet");
return response; //всегда возвращайте аргумент response
}
});

Обратите внимание, что отсутствие правильного определения значения для свойства handleAs может приводить к появлению ошибок, поиск которых может оказаться непростым делом.


Например, если случайно забыть определить параметр handleAs и попытаться в функции load обратиться к значению ответа как к объекту JavaScript, вы наверняка получите ошибку, которая может увести вас далеко, прежде чем вы заметите, что пытаетесь интерпретировать значение типа String как значение типа Object, потому что в тексте сообщения об ошибке значения строк и объектов могут выглядеть практически идентично.

В большинстве приложений выполняются запросы GET, однако у вас могут сложиться обстоятельства, обязывающие использовать запрос типа PUT, POST или DELETE. Процедура выполнения таких запросов остается прежней, только при этом необходимо включить требуемые данные в свойство putData или postData и вызвать функцию rawXhrPut или rawXhrPost, соответственно, как средство передачи данных серверу. Ниже приводится пример использования функции rawXhrPost:
dojo.rawXhrPost({
url : "/place/to/post/some/raw/data",
postData : "{foo : 'bar'}", //литерал JSON
handleAs : "json",
load : function(response, ioArgs) {
/* Здесь выполняются всякие интересные действия */
return response;
},
error : function(response, ioArgs) {
/* Получше обрабатывайте ошибки */
return response;
}
});

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
DeferredList
JSON
OpenAjax Hub
Внедрение объектов Deferred в функции XHR
Вызов удаленных процедур