【问题标题】:How to return value from an ajax call function如何从ajax调用函数返回值
【发布时间】:2018-01-03 14:52:22
【问题描述】:

我有一个功能

function GetITStaffList(){
    var go_path = "Server/ITComplains.php?action=GetITStaffList&vars=0";
    $jqLibrary.get(go_path,
        {}, function(data)
        {
            var parseData = JSON.parse(data);
            console.log("GetPendingAndInProgressComplainsByGeneratorId : ", parseData);

            return parseData;
        });
}

我在这样的代码中某处调用它

var ITStaffList = GetITStaffList();
MakeDropDownITStaff(ITStaffList);

但问题是每次返回 null。我知道我必须使用回调和类似承诺的东西,但我不知道如何在我的上下文中适应这个东西。如何使用 ajax 调用编写按需返回数据的可重用函数?

【问题讨论】:

标签: javascript jquery ajax async-await


【解决方案1】:

改为返回一个承诺。

function GetITStaffList(){

    return new Promise(function(resolve){

       var go_path = "Server/ITComplains.php?action=GetITStaffList&vars=0";
       $jqLibrary.get(go_path,
           {}, function(data)
           {
               var parseData = JSON.parse(data);
               console.log("GetPendingAndInProgressComplainsByGeneratorId : ", parseData);

            resolve(parseData);    //Notice this
        });
    })
}

现在你可以调用函数并等待数据了。

GetITStaffList().then(function(data){
    console.log(data)
})

【讨论】:

  • 感谢它的工作,但它非常复杂。如果我必须从多个请求中获取数据,我会怎么做。那我需要写嵌套吗?就像在 then 中的另一个 then 函数一样?
  • ES6 支持“异步”函数——它消除了 Promise 的复杂性。请为此谷歌。此外,您可以使用一些实现承诺流控制的库。 npmjs.com/package/promise-waterfall
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
相关资源
最近更新 更多