Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript在继续之前等待AJAX_Javascript_Jquery_Kendo Ui - Fatal编程技术网

JavaScript在继续之前等待AJAX

JavaScript在继续之前等待AJAX,javascript,jquery,kendo-ui,Javascript,Jquery,Kendo Ui,在使用剑道ui的内联网格编辑上单击更新时,我有一个竞争条件 保存时,我在保存时执行以下功能: dataBound: function (e) { // This needs to run after the save has finished }, save: function (e) { $.when( $.ajax({ type: "GET", url: "/Admin/OperatingCe

在使用剑道ui的内联网格编辑上单击更新时,我有一个竞争条件

保存时,我在保存时执行以下功能:

dataBound: function (e) {
   // This needs to run after the save has finished           
},
save: function (e) {
    $.when(
        $.ajax({
            type: "GET",
            url: "/Admin/OperatingCentre/GetById?id=" + e.model.OperatingCentreId,
            success: function (data) {
                e.model.OperatingCentreName = data.Name;
            }
        }),
        $.ajax({
            type: "GET",
            url: "/Admin/Division/GetById?id=" + e.model.DivisionId,
            success: function (data) {
                e.model.DivisionName = data.Name;
            }
        }),
        $.ajax({
            type: "GET",
            url: "/Admin/OperatingCompany/GetById?id=" + e.model.OperatingCompanyId,
            success: function (data) {
                e.model.OperatingCompanyName = data.Name;
            }
        })
   );
}
我要做的是等待$.when函数,因为网格在调用databound之前没有等待,因此e.model.OperatingCentreName等没有及时设置以显示在网格中

添加wait时,这也没有帮助:

save: async function (e) {
    await $.when(

任何建议都将不胜感激。

补充。save函数中的async

保存:异步函数(e){}

数据绑定:函数(e){
//这需要在保存完成后运行
},
保存:功能(e){
美元。什么时候(
$.ajax({
键入:“获取”,
url:“/Admin/operatingcenter/GetById?id=“+e.model.OperatingCentreId,
成功:功能(数据){
e、 model.OperatingCentreName=data.Name;
}
}),
$.ajax({
键入:“获取”,
url:“/Admin/Division/GetById?id=“+e.model.DivisionId,
成功:功能(数据){
e、 model.DivisionName=data.Name;
}
}),
$.ajax({
键入:“获取”,
url:“/Admin/OperatingCompany/GetById?id=“+e.model.OperatingCompanyId,
成功:功能(数据){
e、 model.OperatingCompanyName=data.Name;
}
})
).完成(功能(a1、a2、a3){
//a1、a2和a3分别是为每个ajax请求解析的参数。
//每个参数都是具有以下结构的数组:
//[数据、状态文本、jqXHR]
//这里触发数据绑定
});

}
我相信
async/await
应该可以解决您的问题

save: async function (e) {

    await $.ajax({
        type: "GET",
        url: "/Admin/OperatingCentre/GetById?id=" + e.model.OperatingCentreId,
        success: function (data) {
            e.model.OperatingCentreName = data.Name;
        }
    }),
    await $.ajax({
        type: "GET",
        url: "/Admin/Division/GetById?id=" + e.model.DivisionId,
        success: function (data) {
            e.model.DivisionName = data.Name;
        }
    }),
    await $.ajax({
        type: "GET",
        url: "/Admin/OperatingCompany/GetById?id=" + e.model.OperatingCompanyId,
        success: function (data) {
            e.model.OperatingCompanyName = data.Name;
        }
    })}

通过这种方式,您将阻止脚本的执行,直到执行ajax调用并执行成功回调

我认为您必须使用.then()
save:async function(e).
$.when(…).then(()=>{/*在这里做你的事*/})
我找到的所有响应都已使用。then/.done等,但这对我没有帮助,我希望保存函数等到$。完成时,否则在分配之前调用数据绑定函数…更改了问题代码以显示我的意思这仍然导致数据绑定函数在保存完成之前运行您错过了“示例”中的等待