Можно ли как-нибудь вызвать другую функцию после завершения вызова ajax? - PullRequest
0 голосов
/ 05 декабря 2018

Есть ли способ, которым мы можем вызвать другую функцию после завершения вызова ajax?Я не хочу вызывать его из обработчика успеха ajax, так как этот вызов ajax используется во многих областях, так что переключаться оттуда будет грязно?Прямо сейчас я делаю это неправильно, используя set timeout для этого оператора вызова ajax и выполняя следующее действие в течение timeout.

проблема:

function my_ajax(){

// здесь идет вызов ajax ....}

место вызова: my_ajax ();оператор 1;

другое место вызова: my_ajax ();оператор2;

есть идеи?

Спасибо

Ответы [ 5 ]

0 голосов
/ 05 декабря 2018

ajax является асинхронным, по умолчанию .. если я понимаю, вам нужно дождаться полного ответа одного ajax и использовать в другом ajax ...

с нативным jascript, этот тип работы довольно сложный.... можно решить с помощью setInterval и clearInterval ,

идея

я работал в прошлом с глобальными переменнымивары.setInterval, определение непрерывного выполнения пользовательской функции и возврат идентификатора, чтобы остановить их в будущем ..... Теперь внутри вашей пользовательской функции вы определяете два условия, первое - это предложения остановки (ваш первый ajax не завершен)а еще ... выполнить второй ajax ... и clearInterval для остановки непрерывного выполнения

Конечно jQuery и простой способ сделать это ... называется ... "когда "..

$.when( $.ajax( "test.php" ) ).then(function( data, textStatus, jqXHR ) {
  // here ajax2 
  $.ajax( "test2.php" )
});
0 голосов
/ 05 декабря 2018

Итак, верните объект Ajax обратно и используйте его для назначения пользовательского метода done.

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

myAjax.done(function () { console.log(1) })
myAjax.done(function () { console.log(2) })
0 голосов
/ 05 декабря 2018

Вы можете инкапсулировать ваш 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') })
0 голосов
/ 05 декабря 2018

Я также предполагаю, что jQuery здесь, но вы можете обернуть ваш ajax в функцию.Fail функционирует как обратные вызовы

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

  return $.ajax(/* ... */)
    .done(success)
    .fail(error);
}
0 голосов
/ 05 декабря 2018

Вы можете использовать .always (), если ваш следующий вызов после ajax должен вызываться постоянно.

// 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...