在ajax调用完成之后,有什么方法可以调用另一个函数?

时间:2018-12-05 14:12:01

标签: javascript ajax asynchronous

ajax调用完成后,有什么方法可以调用另一个函数吗? 我不想从ajax的成功处理程序中调用它,因为此ajax调用用于多个领域,所以从那里切换会很麻烦? 现在,我通过在此ajax调用语句上使用set timeout并在超时内执行下一步操作以一种不好的方式进行操作。

问题:

function my_ajax(){

// ajax呼叫在这里... }

通话地点: my_ajax(); 陈述1;

另一个致电地点: my_ajax(); statement2;

有什么想法吗?

谢谢

5 个答案:

答案 0 :(得分:0)

如果应始终调用ajax之后的下一个调用,则可以使用.always()。

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax( "example.php" )
  .done(function() {
    alert( "success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "complete" );
  });

来源:http://api.jquery.com/jquery.ajax/

答案 1 :(得分:0)

您可以使用接受回调作为参数的函数来封装ajax:

function my_ajax(callback) {
    $.ajax('example.php').done(callback)
}

然后,您可以使用所需的回调进行调用:

// Will log 'AAA' on success of this request
my_ajax(function() { console.log('AAA') })

// Will log 'BBB' on success of this request
my_ajax(function() { console.log('BBB') })

答案 2 :(得分:0)

我也在这里使用jQuery,但是您可以将ajax包装在一个函数中。

function myAjax() { 
  return $.ajax(/* ... */)
}

const ajaxOne = myAjax();
ajaxOne.done(function() { /* do stuff one */ })

const ajaxTwo = myAjax();
ajaxTwo.done(functiion() { /* do stuff two */ })

编辑

对此稍加整理,您可以将成功/失败功能作为回调传递

function myAjax(success, fail) {
  const error = (fail !== undefined) 
    ? fail 
    : function(err) { console.error(err) };

  return $.ajax(/* ... */)
    .done(success)
    .fail(error);
}

答案 3 :(得分:0)

因此返回Ajax对象,并使用它分配自定义的done方法。

function myAjax() {
  return $.ajax( "fooPath" )
}

myAjax.done(function () { console.log(1) })
myAjax.done(function () { console.log(2) })

答案 4 :(得分:0)

ajax默认是异步的。 如果我了解您需要等待一个ajax的完整响应,然后在其他ajax中使用...

使用本地jascript这类工作有些复杂。...可以通过 setInterval clearInterval 来解决,

想法

我过去曾在globals vars工作。 setInterval,定义一个连续执行的customcustom函数,并返回一个id,以在将来停止它们。否则...执行第二个ajax ...和clearInterval以停止连续执行

当然, jQuery 提供了一种简便的方法来执行此操作……称为“何时”。

$.when( $.ajax( "test.php" ) ).then(function( data, textStatus, jqXHR ) {
  // here ajax2 
  $.ajax( "test2.php" )
});