我有表格,我通过电话提交给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 已下载。
答案 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
});
答案 3 :(得分:0)
简单的方法是提交结果将是一个带有iframe
的html页面。 iframe
将执行下载,而父html将执行您喜欢的任何内容。