当ajax的处理时间足够长时,如何从ajax获取数据后运行另一个功能

时间:2018-12-07 04:58:05

标签: jquery ajax

当我使用jquery ajax在服务器中生成一个excel文件并返回文件名时,我想使用其他函数来处理文件名。

但是,有多次(即5s)在服务器中生成excel文件,但尚未返回文件名。

在5s期间,脚本仍在继续运行并运行其他功能,因为文件名未准备好,因此其他功能失败。

我想知道在第一个功能的整个过程完成后如何运行另一个功能并返回文件名吗?下面的代码是我目前所做的。谢谢。

<script>
$(".button").click(function(){
    var obj = {A:'A',B:'B',C:'C'};
    var file = "";
    file = genreport(obj);  //call ajax function to create excel file and return back the file name
    otherfunction(file);    //handle file name with another function 
});

function genreport(obj){
    var filename = "";
    $.post("getreport.cshtml", obj, //cshtml file will generate a excel file in server and return file name, i.e. report.xls
    function(data){
        console.log(data);
        filename = data;
    })
    .done(return filename);
}
</script>

2 个答案:

答案 0 :(得分:1)

您可以如下使用“ async:false”:

$.ajax({
    type: "POST",
    url: url,
    async : false,
    data: data,
    dataType: dataType,
    success : function(data) {}
});

或者您也可以在JavaScript Promise上使用.then()。

答案 1 :(得分:1)

好的,因此您可以在此处将“ otherfunction”作为回调传递给ajax函数

类似这样的东西

genreport(obj, otherfunction)

并在genreport函数中使用它

function genreport(obj, callback){ var filename = ""; $.post("getreport.cshtml", obj, //cshtml file will generate a excel file in server and return file name, i.e. report.xls function(data){ console.log(data); filename = data; callback(filename); //passing filename to callback }) .done(return filename); }