在Asp.net MVC的Ajax调用中下载之前删除的文件

在Asp.net MVC的Ajax调用中下载之前删除的文件,ajax,asp.net-mvc-4,Ajax,Asp.net Mvc 4,我在ASP.net MVC应用程序的控制器类中使用对我的操作的Ajax调用生成excel文件。它工作正常,但问题发生在我的文件处于下载阶段时,Ajax调用将其删除。如果有任何方法不使用SetTimeout,请告诉我 生成Excel文件 $.ajax({ url: "@Url.Action("GenerateReport", "ClientAdmin")", type: "POST", data: { reportStart: reportStart, reportEnd: reportEnd},

我在ASP.net MVC应用程序的控制器类中使用对我的操作的Ajax调用生成excel文件。它工作正常,但问题发生在我的文件处于下载阶段时,Ajax调用将其删除。如果有任何方法不使用SetTimeout,请告诉我

生成Excel文件

$.ajax({
url: "@Url.Action("GenerateReport", "ClientAdmin")",
type: "POST",
data: { reportStart: reportStart, reportEnd: reportEnd},
dataType: "json",
traditional: true,
success: function (downloadUrl) {
    //Download excel file
    window.location = "/ClientAdmin/Download?file=" + downloadUrl;
    //Delete excel file
    $.ajax({
        url: "@Url.Action("DeleteReportFile", "ClientAdmin")",
        type: "POST",
        data: { file: downloadUrl },
        dataType: "json",
        success: function (downloadUrl) {
        },
        error: function () {
            AlertShow("Error!", "Oops! An error occured");
        }
    })
},
error: function () {
    AlertShow("Error!", "Oops! An error occured");
    }
})
我认为您需要jQuery“when”

这是为了强制某些东西是同步的。 (你可以找到可信的答案)

编辑

由于我不确定如何测试您的案例,我可能会建议另一种解决方案。 尝试以某种方式处理“文件下载”事件,然后触发删除功能。
下面是一个可能有用且实用的方法。

将ajax调用2保留在ajax调用1完整函数中。cheerssorry@super cool ajax调用2已经在第一个ajax调用成功中..问题在于以下行,因为它下载excel文件,并且在完成之前,第二个ajax调用触发//下载excel文件window.location=“/ClientAdmin/download?file=“+downloadUrl;是的,我刚刚注意到了。犯错误很抱歉你有没有试着保持完整?让我们知道,完全……,没有相同的结果:(@super-coolI认为您的问题可以通过提问“浏览器接收文件下载时的事件”来简化。在这个SO线程中,尝试回答该问题:
$.when( $.ajax( "test.aspx" ) ).then(function( data, textStatus, jqXHR ) {
  alert( jqXHR.status ); // Alerts 200
});