Функции AJAX, вызываемые последовательно

Извините меня. Я все еще изучаю удивительный язык JQuery. Я столкнулся с проблемой, много читал и все еще в беспорядке. Надеюсь, что вы можете помочь мне с решением.

У меня есть три функции, которые выполняют три почтовых звонка. Они возвращают текстовую переменную, которую я в последнее время анализирую как JSON, если она доступна.

<script>
$(document).ready(function() {
...
afterAction:
a(param1,param2);
...
param1: [other value];
...
b(param1);

select:
a(param1,param2);
b(param1);
...
});

function a (param1,param2) {
// get data from DOM objects, val, texts, whatever
$.post ( "a.php", {
param1: param1,
param2: param2,
stuff1: [data from DOM objects...]
},function(data){
console.log(data)
// do something (change dom objects properties, append..)
}
});

function b (param1) {
// get data from DOM objects, val, texts, whatever
$.post ( "b.php", {
param1: param1,
stuff1: [data from DOM objects...]
},function(data){
console.log(data)
// do something  (change dom objects properties, append..)
}
});

function c (param1) {
// get data from DOM objects, val, texts, whatever
$.post ( "c.php", {
param1: param1,
stuff1: [data from DOM objects...]
},function(data){
console.log(data)
// do something  (change dom objects properties, append..)
}
});

</script>

Дело в том, что все эти функции работают хорошо … Но они, конечно, асинхронны. И мне нужно:

  • Выполнять по порядку, как если бы они были синхронными
  • Помимо этого (и это одна из моих проблем) функция a получает param1, но после выполнения кода изменит param1 на другое значение, которое будет использоваться для функции b.
  • И, более того, это происходит, если инициируется определенное событие DOM (afterAction Owl Carrousel). Если срабатывает другое событие DOM (selectmenu select), функция a будет выполнена, param1 сохранит свое значение и будет вызвана функция b.

Вещи, которые я пробовал и не работал:

  1. Используйте запрос $ .ajax (метод post и type = «text»);
  2. var posting = $ .post () и posting.done ();
  3. Гнездовые функции в $ .when (). Then (),
    $ .When (а ()). Затем (функция () {


    $ .when (b ()). then ({….});
    });
  4. Плагин AjaxQ ($ .postq). Но это кажется очень медленным, и я не знаю почему, он не получает данные.

Что делают звонки?

  1. Функция а вставляет данные, обновляет их или удаляет их с помощью php и mysqli. Работает нормально точно.
  2. Функция b извлекает данные из той же таблицы.
  3. Функция c извлекает список дат и изменяет HTML-код перед выбором.

Большое спасибо, если вы можете мне помочь …

ДОБАВЛЕНО 17/03/2015

Частичное решение? Работаю над этим! Измените $ .post на $ .ajax ({… type: ‘POST’}) и извлеките данные, используя «return $ .ajax» и успешный обратный вызов. Позже мне понадобится $ .when (a (param1, param2), b (param1 *), c (param1)). Done (function (data1, data2, data3)) {…}); заявление, которое я могу иметь дело с отдельным набором данных. Дело в том, что когда param1 — это другое значение для функций a и b, которое должно быть вычислено ранее,

0

Решение

Быстрый способ состоит в том, чтобы связать их в цепочку, вызвав каждую из них в функции обратного вызова той, которую вы хотите выполнить до этого.

Например, так как a ваша первая функция, вызовите ее, затем при ее обратном вызове манипулируйте переменными, как вам нужно, и вызовите bи сделать то же самое в нем для вызова c,

Грубый пример, основанный на вашем коде:

  $(document).ready(function() {
//call function a first
a(param1,param2);
});

function a (param1,param2) {
// get data from DOM objects, val, texts, whatever
$.post ( "a.php", {
param1: param1,
param2: param2,
stuff1: [data from DOM objects...]
},function(data){
console.log(data)
// do something (change dom objects properties, append..)

//change the state of param1 to whatever is required and then call function b
b(param1);
}
});

function b (param1) {
// get data from DOM objects, val, texts, whatever
$.post ( "b.php", {
param1: param1,
stuff1: [data from DOM objects...]
},function(data){
console.log(data)
// do something  (change dom objects properties, append..)

//change the state of param1 to whatever is required and then call function c
c(param1);
}
});

function c (param1) {
// get data from DOM objects, val, texts, whatever
$.post ( "c.php", {
param1: param1,
stuff1: [data from DOM objects...]
},function(data){
console.log(data)
// do something  (change dom objects properties, append..)
}
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]