Php 按顺序调用AJAX函数
对不起。我还在学习令人惊叹的JQuery语言。我遇到了一个问题,读了很多书,但仍然一团糟。希望你能指导我解决这个问题 我有三个函数,它们执行三个post调用。它们返回一个文本变量,我最近将其解析为JSON(如果可用)Php 按顺序调用AJAX函数,php,jquery,asynchronous,sync,Php,Jquery,Asynchronous,Sync,对不起。我还在学习令人惊叹的JQuery语言。我遇到了一个问题,读了很多书,但仍然一团糟。希望你能指导我解决这个问题 我有三个函数,它们执行三个post调用。它们返回一个文本变量,我最近将其解析为JSON(如果可用) <script> $(document).ready(function() { ... afterAction: a(param1,param2); ... param1: [other va
<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>
$(文档).ready(函数(){
...
后遗症:
a(参数1,参数2);
...
参数1:[其他值];
...
b(1);
选择:
a(参数1,参数2);
b(1);
...
});
函数a(参数1,参数2){
//从DOM对象、val、文本等获取数据
$.post(“a.php”),{
param1:param1,
param2:param2,
stuff1:[来自DOM对象的数据…]
},函数(数据){
console.log(数据)
//执行某些操作(更改dom对象属性,追加..)
}
});
功能b(参数1){
//从DOM对象、val、文本等获取数据
$.post(“b.php”),{
param1:param1,
stuff1:[来自DOM对象的数据…]
},函数(数据){
console.log(数据)
//执行某些操作(更改dom对象属性,追加..)
}
});
函数c(参数1){
//从DOM对象、val、文本等获取数据
$.post(“c.php”),{
param1:param1,
stuff1:[来自DOM对象的数据…]
},函数(数据){
console.log(数据)
//执行某些操作(更改dom对象属性,追加..)
}
});
问题是所有这些功能都很有效。。。当然,它们是异步的。我需要:
- 按顺序执行,就像它们是同步的一样
- 除此之外,(这是我的挑战之一)函数a接收一个param1,但在执行后,代码将把param1更改为另一个值,该值将用于函数b
- 而且,更重要的是,如果触发了某个DOM事件(后动作Owl Carrousel),就会发生这种情况。如果触发了一个不同的DOM事件(selectmenu select),函数a将被执行,param1将保留其值,函数b将被调用
部分解决方案?正在努力!将$.post更改为$.ajax({…键入:'post'}),并使用“return$.ajax”和成功回调检索数据。稍后我需要一个$.when(a(param1,param2),b(param1*),c(param1)).done(函数(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..)
}
});
谢谢你,斯塔提斯。无论如何,这是一个解决方案,但我不认为这是一个明智的解决方案。注意,我需要在两种不同的情况下调用b函数!Agrgal,很难看出这两条评论都与所问的问题有关。请把你的问题读回来,问问你自己,它需要编辑吗?听起来你的服务可以得到更好的优化。如果您需要“链接”异步请求,那么您可能做错了什么。为什么不(例如)在函数a的响应中返回函数b数据。这只是一个简单的请求。菲尔,还在学习,谢谢你的回答。你能教我怎么做吗?谢谢请注意,函数“a”返回与函数“b”返回完全不同,它们可以单独请求,也可以一起请求。你有什么建议吗。。。?函数a(){….成功:b(数据);…}???不,我的意思是修改实际的服务本身,因为它们的级别太低,并且没有针对您的web应用程序进行优化。如果您知道代码需要在a之后调用b,那么发出双重请求是低效的。我将创建另一个服务,它同时执行a和b两种功能,这样浏览器只需要向它发出一个请求。如果他们是第三方服务,我建议添加一个中间层的服务,这是优化处理您的网站的行动。