Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按顺序调用AJAX函数_Php_Jquery_Asynchronous_Sync - Fatal编程技术网

Php 按顺序调用AJAX函数

Php 按顺序调用AJAX函数,php,jquery,asynchronous,sync,Php,Jquery,Asynchronous,Sync,对不起。我还在学习令人惊叹的JQuery语言。我遇到了一个问题,读了很多书,但仍然一团糟。希望你能指导我解决这个问题 我有三个函数,它们执行三个post调用。它们返回一个文本变量,我最近将其解析为JSON(如果可用) <script> $(document).ready(function() { ... afterAction: a(param1,param2); ... param1: [other va

对不起。我还在学习令人惊叹的JQuery语言。我遇到了一个问题,读了很多书,但仍然一团糟。希望你能指导我解决这个问题

我有三个函数,它们执行三个post调用。它们返回一个文本变量,我最近将其解析为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>

$(文档).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将被调用
我尝试过但没有成功的事情:

  • 使用$.ajax请求(post方法和type=“text”)
  • var posting=$.post()和posting.done()
  • 将函数嵌套在$.when().then()中, $.when(a()).then(function()){ ... ... $.when(b()).then({…}); });
  • AjaxQ插件($.postq)。但它似乎非常慢,我不知道为什么,它无法检索数据 电话是干什么的?
  • 函数a使用php和mysqli插入、更新或删除数据。它确实很好用
  • 函数b从同一个表中检索数据
  • 函数c检索日期列表并在选择html之前更改菜单 如果你能帮助我,非常感谢

    2015年3月17日增补
    部分解决方案?正在努力!将$.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两种功能,这样浏览器只需要向它发出一个请求。如果他们是第三方服务,我建议添加一个中间层的服务,这是优化处理您的网站的行动。