繁体   English   中英

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

[英]Is there any way we can call another function after the ajax call completed?

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

问题:

function my_ajax(){

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

调用的地方:my_ajax(); 陈述1;

另一个调用位置:my_ajax(); 语句2;

有任何想法吗?

谢谢

如果应始终调用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/

您可以使用接受回调作为参数的函数来封装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') })

我在这里也假设使用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);
}

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

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

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

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

使用本地jascript,这种类型的工作有些复杂。...可以使用setIntervalclearInterval解决,

这个主意

我过去曾在globals vars工作。 setInterval,定义一个连续执行的custom函数,并返回一个id,以在将来停止它们。.....现在在您的自定义函数中,然后定义两个条件,第一个是停止子句(您的第一个ajax不完整)否则...执行第二个ajax ...和clearInterval停止连续执行

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM