2012-01-11 2 views
0

Как получить изображение через dojo.xhr?Как получить изображение как ответ через xhr?

У меня есть datagrid, и при нажатии на любую строку, Я хочу получить изображение (которое зависит от выбранной строки) с сервера. Изображение должно быть выведено в виде диалога.

Я не вижу никаких параметров handleAs для этого.

В настоящее время у меня есть два варианта,

1) определяют <image> внутри диалог, onClick события показывает диалог, а также установить параметр сервер изображение возвращающего ссылку src (Это не выглядит асинхронным).

2) Кодировать изображение с помощью Base64, проходят в формате JSON. (А что? Как преобразовать его обратно в изображение в браузере?)

Я не удовлетворен с любым из вышеперечисленных.

Просьба предложить. Благодарю.

РЕДАКТИРОВАТЬ

2) Продолжение. нашел способ получить эту работу, установив атрибут src="data:image/jpeg; base64, *deferredObj*" тега <image>, но все же для меня это не очевидный способ сделать это.

ответ

0

Спасибо, что поделились своими мыслями и своим временем. Я понял, что XHR не предназначен для двоичных данных (например, изображений) Я изменил дизайн своего приложения.

0

Вы не должны использовать кодировку изображения base64. IE имеет плохую поддержку data:image.

URL-адрес изображения - правильный путь. Решение 1) лучше. Если производительность не очень хорошая, используйте image preloading, чтобы улучшить ее.

+0

Спасибо, что указали на недостаток с 'IE' и' data: image'. Я концентрируюсь только на 'FF'. Но оба подхода неочевидны для меня. Я чувствую, что есть более аккуратные способы сделать это, например, что-то вроде установки mimetype 'Content-Type = image/jpg'. «Http'-'Mimetypes' там уже 15 лет для этой цели. Я имею в виду, что отправка изображений через 'xhr' является довольно тривиальной задачей, и я не могу поверить, что это невозможно сделать с помощью dojo (по стандартным или по крайней мере простым) :( – 0xc0de

0

Когда вы строите свою структуру сетки, укажите атрибут formatter: myFunction. Затем используйте myFunction, чтобы вызвать dojo.xhrGet, чтобы получить изображение. Итак, что-то вроде этого:

grid = new dojox.grid.dataGrid({ 
     id: 'grid', 
     structure: gridStructure 
}); 
gridStructure = [ 
    {field: 'id', name: 'ID', formatter: myFunction} 
]; 
myFunction = function(){ 
    dojo.xhrGet(
     //retrieve image here 
    ); 
} 
Смежные вопросы