2017-03-14 16 views
0

SymfonyでWebアプリケーションを開発していますが、Ajaxにいくつか問題があります。symfonyとAjaxのエラー404、symfonyのツールバーにエラーメッセージがありません

id(1,2,3,4 ...)とdynamicaly(ajaxを使用)のボタンを押して、それらのIDに関連するいくつかのものをdb内で検索したいと思います。

私のjavascriptのコード:

appP08.controls.btnZone.on('click', function(){ 
     var ZoneID = $(this).attr('id'); 
     var ZoneName = $(this).text(); 
     alert(ZoneID); 

     $.ajax({ 
      url: "/recor/circuit", 
      type: "POST", 
      data: { 
       ZoneID: ZoneID 
      }, 
      success: function(data){ 
       $('#divCircuit').html(data); 
       $('#zoneChoice').text(' - ' + ZoneName); 
       appP08.controls.divZone.hide(); 
      } 
     }); 
    }); 

私はボタンを押すと、アヤックスが実行されるとjQueryがうまく機能して私は、警告を参照してください。しかしその後、何も起こらない。

mk_reappro_production_circuit: 
    path: /recor/circuit 
    defaults: {_controller: MKReapproProductionBundle:Appli:circuit } 
    methods: [post] 

とコントローラ:

私はルートを作成している

public function circuitAction(Request $req){ 
    $req = $this->getRequest(); 
    if ($req->isXMLHttpResult()){ 
     $id = $req->request->get('ZoneID'); 

     if($id != null){ 
      $repository = $this->getDoctrine()->getManager()->getRepository('MKReapproProductionBundle:Circuit'); 
      $listCircuits = $repository->findAll($id); 

      return $this->render('MKReapproProductionBundle:Appli:circuit.html.twig', array(
       'listCircuits' => $listCircuits 
      )); 
     } 
    } 
    } 

ビュー:

{% extends "MKReapproProductionBundle::layout.html.twig" %} 

{% block mk_appli_train_body_circuit %} 

<div id="divCircuit"> 
    {% for circuit in listCircuits %} 
    <button class="btn btn-success" name="btnZone"> 
     {{ circuit.name }} 
    </button> 
    {% endfor %} 
</div> 

{% endblock %} 

私は、このボタンを表示するにはどうすればよいですか? symfonyのツールバーで は、これはただそこにある: Symfony Toolbar Message Error

+0

エラーコールバックを常にajaxリクエストに追加してください。 – rottenoats

+0

ajaxリクエストでエラーコールバックに挿入する必要がある問題を表示するにはどうすればよいですか?前もって感謝します ! – mkuhm

+0

あなたのコントローラで、あなたが期待していることを確認するためにdump($ id)しようとしましたか? – ehymel

答えて

1

私はあなたがそれを正しく生成されていないため、symfonyはパスが見つからないため、エラーがあると思います。これを試してみてください:{{ path('mk_reappro_production_circuit') }}を使用して

appP08.controls.btnZone.on('click', function(){ 
 
     var ZoneID = $(this).attr('id'); 
 
     var ZoneName = $(this).text(); 
 
     alert(ZoneID); 
 

 
     $.ajax({ 
 
      url: "{{ path('mk_reappro_production_circuit') }}", //Change this line. 
 
      type: "POST", 
 
      data: { 
 
       ZoneID: ZoneID 
 
      }, 
 
      success: function(data){ 
 
       $('#divCircuit').html(data); 
 
       $('#zoneChoice').text(' - ' + ZoneName); 
 
       appP08.controls.divZone.hide(); 
 
      } 
 
     }); 
 
    });

、symfonyは正しいパスを生成するための責任を負うことになります。コントローラでの追加コメントとして

、:

public function circuitAction(Request $req){ 
    $req = $this->getRequest(); //This line is not necessary, you are passing the $req variable directly to the function. 
    if ($req->isXMLHttpResult()){ 
     $id = $req->request->get('ZoneID'); 

     if($id != null){ 
      $repository = $this->getDoctrine()->getManager()->getRepository('MKReapproProductionBundle:Circuit'); 
      $listCircuits = $repository->findAll($id); 

      return $this->render('MKReapproProductionBundle:Appli:circuit.html.twig', array(
       'listCircuits' => $listCircuits 
      )); 
     } 
    } 
    } 

編集:もちろん

、小枝テンプレート内の{{ path('mk_reappro_production_circuit') }}作品、pathは小枝の変数であるため。外部jsファイルをインポートする場合は、js内で使用できるグローバル変数をあなたのtwigテンプレート内に作成する必要があります。このような何か:

{% block js %} 
 
    <script type="text/javascript"> 
 
     var path = "{{ path('mk_reappro_production_circuit') }}"; 
 
    </script> 
 
{% endblock %}
この文では、あなたのjsファイルよりも最初に来なければなりません。あなたのJSで今

、:あなたは本番環境への展開から変更した場合、その後、生成されたルートは再び不正確になりますので、あなたが見つけ

appP08.controls.btnZone.on('click', function(){ 
     var ZoneID = $(this).attr('id'); 
     var ZoneName = $(this).text(); 
     alert(ZoneID); 

     $.ajax({ 
      url: path, //Change this line. 
      type: "POST", 
      data: { 
       ZoneID: ZoneID 
      }, 
      success: function(data){ 
       $('#divCircuit').html(data); 
       $('#zoneChoice').text(' - ' + ZoneName); 
       appP08.controls.divZone.hide(); 
      } 
     }); 
    }); 

ソリューションは、正しいものではありません。

0

パスエラーです。

私はこのように私のjsファイルにそれを訂正:

path: "http://" + location.host, 

$.ajax({ 
      url: selfObject.path + "/SymfonyReapproProduction/web/app_dev.php/appli/circuit", 

{{ path('mk_reappro_production_circuit') }}が動作しない理由を私はまだ理解していません。

関連する問題