Jquery 1.11.1 - 下载文件和其他回调

时间:2016-10-26 10:04:44

标签: javascript jquery django file download

我有表格,我通过电话提交给django服务器。

$("#my_form").submit();

服务器通过执行以下代码返回xml文件:

content = some_data_retrieved_from_database_as_xml()
response = HttpResponse(content, content_type='text/xml')
response['Content-Disposition'] = 'attachment; '
response['Content-Disposition'] += 'filename=my_file.xml'
response['Content-Encoding'] = 'UTF-8'
return response

Google Chrome仅下载此文件,但我想要注册附加回调函数,称为myFunction(数据)。

Chrome应该下载此文件,然后调用myFunction(此xml文件)。
我尝试了这段代码,但它不起作用:

$("#my_form").bind('ajax:complete', myFunction);

我也尝试使用$ .post,但之后只调用了回调函数,不幸的是我的文件 NOT 已下载。

4 个答案:

答案 0 :(得分:1)

因此,您希望异步post,下载返回的文件,并执行回调。一种可能性是“伪造”下载链接:

$.post(POST_URL, POST_DATA, function(response) {
  var a = document.createElement('a');
  a.setAttribute('href', 'data:'
    + response.contentType
    + ';charset='
    + response.inputEncoding
    + ','
    + new XMLSerializer().serializeToString(response));
  a.setAttribute('download', DOWNLOAD_FILENAME);
  a.click();
  // file download triggered

  myFunction();
  // additional callback action
});

更新

在评论中提及Zoran Majstorovic,你可以试试这个jQuery插件:http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/

只需添加the source然后

$.fileDownload(POST_URL, {
  httpMethod: "POST",
  successCallback: myFunction
});

为了安全起见,您需要先前设置的Cookie

Set-Cookie: fileDownload=true; path=/

答案 1 :(得分:0)

$(form).submit()不是ajax,而是表单发送(通常是POST),因此,您无法注册任何事件监听器以提交响应完成'据我所知。 我正在使用基于Cookie的jquery-file-download-plugin来执行一些javascript,如您所愿。

答案 2 :(得分:0)

我相信答案,至少根据这个类似的主题:

How to do a Jquery Callback after form submit?

将是:

$("#myform").bind('ajax:complete', function() {
  // tasks to do 
});

See jQuery documentation for ajaxComplete

答案 3 :(得分:0)

简单的方法是提交结果将是一个带有iframe的html页面。 iframe将执行下载,而父html将执行您喜欢的任何内容。