jQuery - Ajax调用未能成功回调但仍在运行

时间:2011-09-27 05:07:39

标签: php jquery ajax

我的问题: 我的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失败的原因。只是不知道如何解决它。


编辑:没有任何效果。 :(我尝试加载到iframe但由于帧加载中断问题无法获取加载事件触发器。最后我只是伪造了一个超时,运行一段时间后,比最长的下载稍长我可以合理地期待。

1 个答案:

答案 0 :(得分:1)

嗯,我相信我已经修复了我的类似情况(虽然我没有使用ajax,但是我设置了HTTP标头来提交下载数据)。随机平底船:尝试将您的表单从GET更改为POST。仍然认为这是一个Safari bug,因为它似乎不会影响FF或Chrome。