2015-06-30 2 views
1

Итак, у меня есть файлы с списком таблиц, URL каждого файла сохраняется как атрибут данных на кнопке. При нажатии кнопки я хочу запустить Javascript/Ajax-вызов, который будет загружать файл по URL-адресу.Принудительная загрузка файла либо Ajax, либо Javascript

Теперь некоторые предостережения,

  1. Файл должен быть загружен с помощью диалогового окна загрузки или нужно просто быть добавлены к загрузке броузеров как и следовало ожидать.
  2. Запрос должен иметь возможность принимать заголовки, поскольку это запрос перекрестного домена.
  3. Это должно работать на основных браузерах (IE, Chrome, Firefox, Safari)

До сих пор я пытался использовать XMLHttpRequest:

e.preventDefault(); 
var csrftoken = getCookie('csrftoken'); 
var req = new XMLHttpRequest; 
req.open("POST",$(this).data("url")); 
req.setRequestHeader("MY HEADER", "HEADER VALUE;"); 
req.withCredentials = true; 
req.send(); 

Я также попытался Ajax GET запрос (который не приводит к загрузке) и использует атрибут «Загрузить» на теге привязки (который не принимает заголовки).

Благодаря

+0

Есть ли причина, по которой вы не можете просто использовать ''? – light

+0

AJAX делает ровно 0 смысл. Просто используйте регулярные ' Mjh

+0

@light: [caveat # 3, я полагаю.] (Http://caniuse.com/#feat=download) –

ответ

4

Вместо использования тега привязки, который не является кросс-браузер совместимый (по-видимому, я не понимал, Microsoft был настолько медленным, чтобы получить спецификацию HTML5 .. Не неожиданный, хотя)

Мы может использовать iframe, чтобы избежать перенаправления и добиться этого эффекта при сохранении соответствия между браузерами.

<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe> 

Пока файл не является .html или какой-то файл, который может отображаться через браузер (.htm, .html, .xhtml, .aspx и т.д.), то он должен загрузить файл ,

+0

Насколько мне известно, атрибут Download не позволяет включать заголовки запросов. – Malekai

+0

Возможно, вы не полностью объясняете, что вы пытаетесь сделать. Что именно вы должны делать, точно? – Mike

+0

При нажатии кнопки I файл по URL. Файл должен быть загружен через диалоговое окно загрузки или должен быть просто добавлен в загрузку браузеров, как и следовало ожидать. Запрос должен быть ** способен принимать заголовки, так как это запрос перекрестного домена. ** Это необходимо для работы с основными браузерами (IE, Chrome, Firefox, Safari). – Malekai

0

Вы должны захватить URL, а затем:

document.location = 'data:Application/octet-stream,' + encodeURIComponent("http://somedomain.com/somefile.some"); 

или

window.open("http://somedomain.com/somefile.some"); 

Вам не нужно заголовки с этим подходом.

+0

здесь не работает. –

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