如何将异步/等待与jQuery Ajax一起使用?

时间:2018-11-16 12:07:59

标签: jquery async-await

我使用以下代码:

function getForm() {
    var container = $("<div/>");
    //.......
    var s = jqBS3Input("idToBeSet", "select", null, "In charge");
    container.append(s);
    s = s.find("select");
    $.ajax({
        url:"/ThirdParty/Users",
        async: false
    }).done(function(data, status, jxqhr) {
        data.Data.forEach(function(r) {
            s.append($("<option>" + r.FullName + "</option>"));
        })
    });
    return container;
}

我想改为执行以下操作:

function async getFormAsync() {
    var container = $("<div/>");
    //.......
    var s = jqBS3Input("idToBeSet", "select", null, "In charge");
    container.append(s);
    s = s.find("select");
    var resps = await $.get("/ThirdParty/Users");
    resps.always(function(data, status, jxqhr) {
        data.Data.forEach(function(r) {
            s.append($("<option>" + r.FullName + "</option>"));
        })
    });
    return container;
}

但我无法以这种方式运行

如何与jquery一起使用async / await?

1 个答案:

答案 0 :(得分:1)

解决方案是:

try {
    var users = await $.ajax({
        url: "/ThirdParty/Users"
    });        
    users.Data.forEach(function (r) {
        s.append($("<option value='" + r.Id.toString() + "'>" + r.FullName + "</option>"));
    });
} catch (err) {

}

请勿受到Data的干扰,调用返回是一个对象:

{
    ExitCode: 0,
    Data: [/* ... */]
}