AJAX函数按顺序调用

时间:2015-03-15 10:07:16

标签: php jquery asynchronous sync

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

我有三个执行三次调用的函数。它们返回一个text var,我最近将其解析为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 method and type =“text”);
  2. var posting = $ .post()和posting.done();
  3. 将函数嵌套在$ .when()。then()中,   $。当(一()),然后(函数(){      ...      ...      $ .when(b())。then({....});   });
  4. AjaxQ插件($ .postq)。但它似乎很慢,我不知道为什么,它不会检索数据。
  5. 这些电话是做什么的?

    1. 函数a插入数据,更新或删除它使用php和mysqli。它确实可以正常工作。
    2. function b从同一个表中检索数据。
    3. function c检索日期列表并更改selectmenmen html之前的内容。
    4. 非常感谢你能帮助我...

      ADDED 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函数的不同值时,先前要计算,

1 个答案:

答案 0 :(得分: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..)
              }
  });