2

これは私の最初の日であり、ここでの最初の質問です。私の質問がこのプラットフォームにとって非常に些細なことである場合は、ご容赦ください。

私は ajax 内で ajax を呼び出そうとしています. 1 つの ajax 呼び出しは 1 つのコトローラー アクションを呼び出します.このアクションではデータベースにレコードが挿入されます. 最初の 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();
}

2 番目の 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 の成功の中で 2 番目の ajax を呼び出していますが、2 番目の ajax 呼び出しは更新されたデータを取得していません。

最初の ajax の完了後に 2 番目の ajax が呼び出され、最近挿入されたデータも取得できるようにするにはどうすればよいですか

ありがとう

私の解決策 1つの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)); 
               } 
            }
       });   
4

3 に答える 3

3

問題は、「データ」という変数名がたくさんあることにあると思います。2 回目の ajax 呼び出しでは、送信されるデータは常に「true」になりますが、何か他のものを送信したいと思われます。物事を明確にし、何が起こるかを確認するために、それらに一意の名前を付けます。

于 2012-08-29T09:17:45.080 に答える
1

1 つの 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)); 
           } 
        }
   });  
于 2012-08-30T13:40:53.313 に答える
0

最初の Ajax の成功メソッドの横にある Ajax は、最初の Ajax の後に 2 番目の Ajax が呼び出されるようにする必要があります。success メソッドは、結果が返された後にのみトリガーされます。
テストのために、2 番目のリクエストを呼び出す直前に、最初の Ajax リクエスト内に console.log() を追加します。もう 1 つの console.log() は、2 番目の Ajax 成功メソッド内にあります。

最初の success->data 変数に console.log を配置して、何が得られるかを確認してください。エラーが発生した場合、2 番目のリクエストは失敗します。

于 2012-08-29T09:22:18.693 に答える