我的问题: 我的ajax请求按预期下载生成的文件,但从不触发成功回调并立即触发完整的回调。如何通过完成文件下载来触发函数?
一些细节: 我有一个提交给自己的表单,并调用一个生成文件供下载的函数。
ajax:
var prepdata = 'start=' + startdata + '&end=' + enddata;
$.ajax({
url: 'index.php',
data: prepdata,
success: function(){console.log('success.');},
complete: function(){console.log('complete')}
});
因此,您提交表单(在index.php中),表单提交到同一页面(index.php)并传递一些$ _GET参数。 $ _GET参数的存在触发了一个函数,该函数从数据库获取一些数据,格式化文件并输出:
header("Content-type: application/vnd.ms-excel");
// more headers here... the correct ones, trust me
print $data;
exit;
现在,所有这些都有效,导致下载文件。问题是我想在下载页面后触发一个javascript函数(删除“... loading”符号)。发生的事情是,在提交后立即触发“完整”回叫时,永远不会触发“成功”回调。
如何在下载数据后触发功能?
有什么想法吗?还有一件事,在Safari中我看到以下控制台错误:
GET http://mysite.com/somedir/?start=1&end=2 Frame load interrupted
我认为这与输出的标题和中断事物的流程有关,我认为这是ajax失败的原因。只是不知道如何解决它。
答案 0 :(得分:1)
嗯,我相信我已经修复了我的类似情况(虽然我没有使用ajax,但是我设置了HTTP标头来提交下载数据)。随机平底船:尝试将您的表单从GET更改为POST。仍然认为这是一个Safari bug,因为它似乎不会影响FF或Chrome。