отправить файл из функции просмотра flask, вызванной из js

#javascript #flask #download

#javascript #flask #Скачать

Вопрос:

Я хочу отправить статический файл с событием кнопки

из этого представления flask

 @flask_class.route('/download')
def download():
    return send_from_directory('/home/ede//flask_lab/app/static/clientdata/', 
           filename="readcolumns.xlsx", as_attachment=True)
  

использование вызова AJAX

 $("#getdata").on('click', ()=>
$.getJSON({url: '/download'}));
  

но я не получаю ответа сервера

представление flask работает при вставке простой HTML-ссылки для скачивания, после чего файл загружается

  <a href="{{ url_for('download') }}">download</a>
  

почему представление flask не выполняется функцией ajax?

Ответ №1:

Вы пытаетесь получить файл Excel (* .xlsx) с помощью файла $.getJSON() , это приведет к ошибке синтаксического анализа. Используйте приведенный ниже пример кода для регистрации ошибки в консоли.

 $.getJSON('/download')
   .then(function(res) {
       console.log(res);
   }).catch(function(error) {
       console.log(error);
   })
  

Комментарии:

1. Я получаю statusText: «OK», тип файла не решает проблему

2. проверьте responseText атрибут, это должно быть какое-то нечитаемое значение для .xlsx. Теперь попробуйте то же самое с a . файл в формате json, и вы получите правильно читаемый ответ.

3. текст ответа читается с помощью файла json, но файл не загружается, также нет ответа сервера

4. Вы хотите увидеть диалоговое окно загрузки? попробуйте этот код: $('#getdata').on('click', function() { window.location = '/download'; });