2014-10-17 4 views
1

Я пытаюсь загрузить двоичные данные с помощью Web API Controller, используя JQuery.get().Как получить двоичные данные с сервера с помощью JQuery?

Кода я попытался это:

$.get("../api/Download/Report?Id=" + selectedItem.Id);  

, который превращается в HTTP GET с этим URL, когда я отладкой бегового приложения:

http://localhost:12150/api/Download/Report?Id=2515 

браузер показывает 200, как результат, получение двоичного файла данных, но он не открывает и не предлагает загрузить файл. Если я скопирую и вставляю URL-адрес в адресную строку и нажимаю 'Enter', он работает.

Любые предложения или альтернативы, которые допускают относительные пути?

+1

Чтение jQuery.get() документацию, она имеет необязательный параметр dataType, но только кажется, что он принимает xml, json, script или html – nlopedebarrios

+0

Я предполагаю, что проблема связана с сервером. Можете ли вы предоставить нам заголовок Content-Type? Это скажет браузеру, что делать с контентом. Кроме того, я бы использовал $ .ajax в этом случае ... –

+0

Если возможно, можно отправить ответ строки данных и тип ожидаемых данных; например, 'image',' text', other? Спасибо – guest271314

ответ

2

Вы не должны использовать ajax для таких вещей. Если вы хотите заставить пользователя загрузить ответ, это может стать беспорядочным. Откройте вместо этого новую вкладку/окно; в большинстве браузеров он все равно закроется, и пользователь даже не заметит, что он был открыт! :) Если вы знаете свои URL-адреса при загрузке, вы можете просто сделать якорный тег с атрибутом target="_blank". То есть:

<a href="http://localhost:12150/api/Download/Report?Id=<?=$reportID?>" target="_blank">Download report</a> 

(Ну, вы знаете основные HTML, но вы получите идею)

Если вы хотите/должны это сделать с JS, идти с простой window.open():

window.open("../api/Download/Report?Id=" + selectedItem.Id,'_blank'); 

Отказ от ответственности: Я не знаю, действительно ли этот относительный URL будет работать в window.open(). Если это не просто возиться с построения URL с помощью PHP первый:

$reportURL = $_SERVER['SERVER_NAME']."/api/Download/Report?Id="; 

, а затем, в ваших JS, только эхо его:

window.open("<?=$reportURL?>" + selectedItem.Id,'_blank'); 
+0

Вот как я это сделал, благодаря Dencker. – nlopedebarrios

0

с помощью $.get просто помещает возвращаемые данные запроса в объект, с которым вы можете обращаться в обратном вызове. что вам нужно сделать, это просто ваш апи вернуть URL загрузки, а затем сообщить браузеру, чтобы загрузить его,

как сделать это объясняется в этом ответе https://stackoverflow.com/a/5192980/1994767

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