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