在ajax中调用ajax

时间:2012-08-29 09:12:00

标签: php ajax jquery symfony

这是我的第一天和第一个问题,如果我的问题对于这个平台来说非常微不足道,希望你能原谅我。

我试图在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调用

在创建操作中进行插入,在插入后立即获取投资组合的所有组,并返回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 :(得分:3)

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

答案 1 :(得分:1)

只使用一个ajax调用

在创建操作中进行插入,在插入后立即获取投资组合的所有组,并返回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)); 
           } 
        }
   });  

答案 2 :(得分:0)

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

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