代码之家  ›  专栏  ›  技术社区  ›  Wearybands

在ajax内部调用ajax

  •  3
  • Wearybands  · 技术社区  · 12 年前

    这是我在这里的第一天,也是第一个问题,如果我的问题对这个平台来说很琐碎,希望你能原谅我。

    我试图在ajax内部调用ajax,一个ajax调用将调用一个cotroller操作,在其中它将在数据库中插入一条记录,第一个ajax调用的操作是

    public function createAction(Request $request){
        if ($request->isXmlHttpRequest()) {
            $name = $request->get("gname");
            $description = $request->get("desc");
                        $portfolio_id = $request->get("PID");
                        $portfolio = $this->getDoctrine()
                            ->getRepository('MunichInnovationGroupPatentBundle:PmPortfolios')
                            ->find($portfolio_id);
            $portfolio_group = new PmPatentgroups();
            $portfolio_group->setName($name);
            $portfolio_group->setDescription($description);
            $portfolio_group->setPortfolio($portfolio);
            $portfolio_group->setOrder(1000000);
            $portfolio_group->setIs_deleted(0);
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($portfolio_group);
            $em->flush();
            $msg = 'true';
        }
        echo $msg;
        return new Response();
    }
    

    第二个ajax调用将获取第一个ajax调用插入的更新数据

    public function getgroupsAction(Request $request){
        if ($request->isXmlHttpRequest()) {
    
            $id = $request->get("PID");
            $em = $this->getDoctrine()->getEntityManager();
            $portfolio_groups = $em->getRepository('MunichInnovationGroupPatentBundle:PmPatentgroups')
            ->getpatentgroups($id);
            echo json_encode($portfolio_groups);
            return new Response();
        }
    }
    

    我的JQuery如下

     $.ajax({
             type: 'POST',
             url: url,
             data: data,
             success: function(data) {
             if(data == "true") {
                     $("#new-group").fadeOut("fast", function(){
                     $(this).before("<strong>Success! Your Portfolio Group is created Successfully.</strong>");
                     setTimeout("$.fancybox.close()", 3000);
                     });
                      $.ajax({
                              type: 'POST',
                              url: getgroups,
                              data: data,
                              success: function(data) 
                              { 
                                var myArray = JSON.parse(data); 
                                var options = $("#portfolio-groups"); 
                                for(var i = 0; i < myArray.length; i++)
                                { 
                                  options.append($("<option />").val(myArray[i].id).text(myArray[i].name)); 
                                 } 
                           } 
                    });
                }
             }
         });
    

    我调用第二个ajax内部的第一个成功,以确保第一个ajax成功完成,但第二个ajax调用没有得到更新的数据。

    我如何确保在第一个ajax完成后调用第二个ajax,并获得最近插入的数据

    谢谢

    我的解决方案 只需使用一个ajax调用

    在进行插入的create操作中,插入后立即获取公文包的所有组,并返回json_encode($portfolio_groups);

    JQuery内部

     $.ajax({
            type: 'POST',
            url: url,
            data: data,
            success: function(data) {
                  $("#new-group").fadeOut("fast", function(){
                  $(this).before("<strong>Success! Your Portfolio Group is created Successfully.</strong>");
                  setTimeout("$.fancybox.close()", 3000);
                  });
                  var myArray = JSON.parse(data); 
                  var options = $("#portfolio-groups"); 
                  for(var i = 0; i < myArray.length; i++)
                  { 
                     options.append($("<option />").val(myArray[i].id).text(myArray[i].name)); 
                   } 
                }
           });   
    
    3 回复  |  直到 12 年前
        1
  •  4
  •   Tetaxa    12 年前

    我认为问题可能在于你有很多变量名称数据。在第二个ajax调用中,发送的数据将始终是“true”,但我怀疑您希望发送其他数据。我会给他们起独特的名字,让事情变得更清楚,看看会发生什么。

        2
  •  1
  •   Wearybands    12 年前

    只需使用一个ajax调用

    在进行插入的create操作中,插入后立即获取公文包的所有组,并返回json_encode($portfolio_groups);

    JQuery内部

    $.ajax({
        type: 'POST',
        url: url,
        data: data,
        success: function(data) {
              $("#new-group").fadeOut("fast", function(){
              $(this).before("<strong>Success! Your Portfolio Group is created Successfully.</strong>");
              setTimeout("$.fancybox.close()", 3000);
              });
              var myArray = JSON.parse(data); 
              var options = $("#portfolio-groups"); 
              for(var i = 0; i < myArray.length; i++)
              { 
                 options.append($("<option />").val(myArray[i].id).text(myArray[i].name)); 
               } 
            }
       });  
    
        3
  •  0
  •   user1134422    12 年前

    在Ajax方面,第一个Ajax的成功方法,正如您所做的那样,应该确保您在调用第一个Ajax之后调用第二个Ajax。只有在返回结果后才会触发success方法。
    对于测试,在调用第二个Ajax请求之前,在第一个Ajax请求中添加console.log()。以及第二个Ajax成功方法中的另一个console.log()。

    尝试在第一次成功时放入console.log->数据变量,看看你得到了什么。如果您有错误,我将导致第二个请求失败。