$ .ajax成功后执行一个函数,而不直接将其放入回调中

时间:2017-04-12 03:47:25

标签: javascript jquery ajax

我有这个函数,我的代码的很多部分都称之为。

function test() {
  $.ajax({
    url : url,
    type : 'GET',
    success : {
      verifyID();
      verifyName();
      verifyBlah();
    }
  });
}

我有另外一个功能:

addProductCart(productID);

在我调用addProductCart()之前,我需要调用测试函数,但是,其他进程调用测试函数。

我想这样做:

test() ---> if test ok (success) ----> addProductCart()

但我无法将我的函数(addProductCart)设置为成功测试函数,因为正如我所说,许多其他进程调用测试函数。

我该怎么做?

1 个答案:

答案 0 :(得分:6)

  

使用Promises!

test函数返回一个承诺:

function test() {
  return $.ajax({ // <----- Notice the return statement here
    url : url,
    type : 'GET',
    success : {
      verifyID();
      verifyName();
      verifyBlah();
    }
  });
}

当您需要使用此函数测试某些内容并执行另一段代码时,您可以执行以下操作:

test().then(function(data, textStatus){
  //do thing 1
  addProductCart()
  // you can use data or textStatus returned by your ajax function here too!
});

test(someParam).then(function(data, textStatus){ // <--- You can even pass parameters to test function like here, and make it do different ajax call based on your param
  //do thing 2
});

有关其工作原理的详细信息,请参阅jQuery docs for $.ajax。功能

这里有一个很棒的tutorial概念的JavaScript承诺,如果您不熟悉它,可以帮助您入门。