【发布时间】:2014-05-22 17:22:15
【问题描述】:
问题:
在我正在构建的网站上,我有两个 JQuery ajax 长轮询调用不断挂起。 我现在正在尝试添加文件下载功能,以便在按下链接时提示用户使用 SaveAs 框。这个文件的下载工作正常,问题是当链接被按下时,两个 ajax 调用被取消了。
我正在尝试不取消 ajax 调用或立即设置 ajax 调用。
这是链接的代码:
HTML:
<a href="/test" id="testfile">Tasks</a>
JS:
$(document).on('click',"#testfile",function(event){
event.preventDefault();
var href=$(this).attr('href');
window.location.href = href;
updater(); /* AJAX CALL #1 */
notifier(); /* AJAX CALL #2 */
});
我尝试过的:
我在上面的代码中尝试在开始下载后调用两个 ajax 调用。这是行不通的。如果我延迟了一些时间,以便在下载完成后启动调用,那么它可以工作,但看到文件可能很大,因此需要花费未知的时间来接收,这当然是一个糟糕的解决方案。
我真的很困惑为什么要取消 ajax 调用?这是因为我点击链接时正在卸载页面吗?
鉴于我只在具有一个线程的开发服务器上运行,我尝试在链接后立即设置的新 ajax 调用可能会因为服务器繁忙而失败,可能是这种情况吗?
已解决:
我在网站的底部添加了一个隐藏的 iframe,并以我的链接为目标。我还删除了 JS 代码,因为现在没有取消 ajax 调用。
代码现在看起来像这样:
HTML:
<a href="/test" target="filetargetframe" id="testfile">Tasks</a>
********
<iframe name="filetargetframe" style="display:none"></iframe>
【问题讨论】:
-
window.location.href更改页面,并取消所有内容。尝试使用 src=href 创建一个iframe,也许它会起作用。 -
所以即使window.location.href在我的例子中没有改变页面,只是启动了一个文件的下载,浏览器仍然认为它是一个改变的页面,因此停止了ajax调用?如何使用 iframe 解决这个问题?
-
不,如果是下载,它不会改变页面。您可以尝试使用 iframe,但怀疑您会遇到同样的问题。要使用 iframe,请在页面上放置 iframe,将其隐藏(可选),然后将 target="theiframeid" 添加到锚标记并停止阻止默认操作。 (并停止更改 location.href,让锚点单击的默认操作来执行此操作)
-
@KevinB 这似乎有效。 ajax 调用现在没有被取消。非常感谢!
-
@yoavmatchulsky 应该发布(评论的第二部分)作为答案
标签: javascript html ajax jquery