2

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

我正在尝试在 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)); 
               } 
            }
       });   
4

3 回答 3

3

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

于 2012-08-29T09:17:45.080 回答
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)); 
           } 
        }
   });  
于 2012-08-30T13:40:53.313 回答
0

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

尝试将 console.log 放在第一个 success->data 变量上,看看你得到了什么。如果您有错误,我将导致第二个请求失败。

于 2012-08-29T09:22:18.693 回答