jQuery - AJAX:通过另一个函数调用ajax函数并在继续之前等待响应

时间:2016-07-22 14:04:54

标签: jquery ajax

我有两个函数,第一个是CreateNumberList(),我在其中调用函数GetNumbersFromServer(),结果我想创建一个在页面中使用的列表。第二个是带有ajax()的GetNumbersFromServer(),它调用Webservice并返回数字。 请参阅以下代码:

<script>
  function CreateNumberList() {
     $.when(GetNumbersFromServer()).then(function(result) {

     //Do something with result

      });
  }

  function GetNumbersFromServer() {
     $.ajax({
       url: getWebServiceUrl() + "GetNumbersFromServer",
       type: "POST",
       dataType: "xml",
       cache: false,
       data: {}
     }).done(function (data, status) {

       return data;

     }).error(function (jqXHR, textStatus, errorThrown) {
       console.log("GetNumbersFromServer: " + textStatus + " - " + errorThrown);
     });
  }
</script>

问题是,CreateNumberList()函数不等待ajax()函数的结果。我知道ajax()是异步的,调用函数不等待ajax()。出于这个原因,我找到了$ .when()。then()函数。 jQuery API中的示例在when()函数中直接调用ajax()。

$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) )
.then( myFunc, myFailure );

但我想在.when()函数中调用我的函数,然后在.then()函数中使用它的结果而不是.when()函数中的ajax()直接用于维护,复杂性和凝聚力的原因。

我对此感到困惑,无法找到任何解决方案。我没有运气搜索了好几个小时。我也不确定“return”是否是从函数返回值的正确方法,如果我必须首先创建一个延迟对象来回调/返回结果。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

您必须始终从异步函数返回一些内容。

function GetNumbersFromServer() {
  // here
  return $.ajax({
    url: getWebServiceUrl() + "GetNumbersFromServer",
    type: "POST",
    dataType: "xml",
    cache: false,
    data: {}
  }).fail(function (jqXHR, textStatus, errorThrown) {
    console.log("GetNumbersFromServer: " + textStatus + " - " + errorThrown);
  });
}

function CreateNumberList() {
  // here, too
  return GetNumbersFromServer().then(function(result) {
    // do something with result

    // and here
    return data;
  });
}

请注意,没有必要$.when()GetNumbersFromServer()的返回值是一个功能齐全的承诺。

通过不间断的回报链,您可以创建一个完整的工作者功能链:

CreateNumberList().then(function (data) {
   // do something with data

   return newData;
}).then(function (newData) {
   // do something with newData

   // and so on
});