Javascript 在$.ajax成功后执行函数,而不直接将其放入回调中
我有这个函数,代码的许多部分都调用它Javascript 在$.ajax成功后执行函数,而不直接将其放入回调中,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有这个函数,代码的许多部分都调用它 function test() { $.ajax({ url : url, type : 'GET', success : { verifyID(); verifyName(); verifyBlah(); } }); } 我还有另外一个功能: addProductCart(productID); 在调用addProductCart()之前,我需要调用test函数,但是其他进程调
function test() {
$.ajax({
url : url,
type : 'GET',
success : {
verifyID();
verifyName();
verifyBlah();
}
});
}
我还有另外一个功能:
addProductCart(productID);
在调用addProductCart()
之前,我需要调用test函数,但是其他进程调用test函数
我想这样做:
test() ---> if test ok (success) ----> addProductCart()
但我不能将我的函数(addProductCart)设置为成功测试函数,因为正如我所说的,许多其他进程调用测试函数
我该怎么做
使用承诺
从测试中返回承诺,如下所示:
function test() {
return $.ajax({ // <----- Notice the return statement here
url : url,
type : 'GET',
success : {
verifyID();
verifyName();
verifyBlah();
}
});
}
功能测试(){
返回$.ajax({//可能还需要查看其他代码,查看测试函数在做什么,以及调用它们的人在使用测试形式。这可以帮助您如何使测试函数返回布尔值,并在成功块中放入if语句?不确定我是否正确理解了问题。下面给出的解决方案如下所示可能是最好的,但您也可以修改test()
接受指定要运行的其他回调的可选参数。从测试函数返回的承诺在哪里?$。ajax返回承诺。如果您阅读我的答案,我的测试函数与OP相同,但在此之前有一个返回语句。啊,这很好,因此您的函数保持不变,您返回ajax对象并然后根据您需要执行的操作不同地使用它。不,在下一行中,callbackI被test(someParam)抛出,这是无关的,对吗?函数不接受任何参数,不接受任何参数,但它会显示,如果您想传递参数,并更改相同的test()函数基于参数的行为有助于保持代码干燥并重用函数。
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
});