Типы ответов, отличные от HTML

В предыдущем примере сервер возвращал в качестве ответа документ HTML, который можно было извлечь и выполнить над ним некоторые манипуляции. Однако, когда ответ не является разметкой HTML, необходимо соблюсти специальное условие – текст ответа должен заключаться в тег textarea. Как оказывается, использование документа HTML является единственно надежным и переносимым способом передачи данных с помощью IFRAME, а тег textarea является естественным средством транспортировки содержимого в виде текста. Конечно, внутренние механизмы Dojo извлекают это содержимое и используют его как тело ответа. В следующем примере показано, как следует изменить предыдущий пример, чтобы в качестве ответа можно было использовать простой текст, а не разметку HTML.

В сценарии CherryPy нужно только добавить обслуживание файла foo.html и окончательный ответ обернуть в тег textarea, как показано ниже:
import cherrypy
import os
# программный код, выполняющий запросы XHR, будет находиться в файле foo.html,
# и это видно в следующей директиве config
current_dir = os.getcwd()
config = {'/' :
{
'tools.staticfile.on' : True,
'tools.staticfile.filename' : os.path.join(current_dir, 'foo.html')
}
}
local_file_path="/tmp/uploaded_file"
class Content:
#обслуживает передачу файла...
@cherrypy.expose
def upload(self, inbound):
outfile = open(local_file_path, 'wb')
inbound.file.seek(0)
while True:
data = inbound.file.read(8192)
if not data:
break
outfile.write(data)
outfile.close()
return " body>"
cherrypy.quickstart(Content(), '/', config=config)

Единственное, что следует изменить в самом запросе, – это указать иной тип в параметре handleAs:
dojo.io.iframe.send({
form : dojo.byId("foo"),
handleAs : "text", //тип ответа сервера
url : "http://localhost:8080/upload/",
load : function(response, ioArgs) {
console.log(response, ioArgs); //ответ: "Thanks!"
return response;
},
error : function(response, ioArgs) {
console.log("error");
console.log(response, ioArgs);
return response;
}
});.



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

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