2017-01-24 3 views
1

ボタンをクリックした後にAJAXを使用してコントローラコードを実行しようとしています。私が集めたことから、これはAJAXを使うべきです...フロントエンドからバックエンドに応答を送信してから、json応答を生成します。Symfony2でAJAXを正しく使用する方法

しかし、私はこれを正しく行う方法を理解できません。私はAJAXにコントローラコードを成功させる方法を確信しています。

成功したらテーブルを表示するだけですが、AJAXのポイントであるので、ボタンがクリックされるまでコントローラコードを実行しないようにしています。

symfonyはこの上のドキュメント持っているように見えません。http://symfony.com/legacy/doc/book/1_0/en/11-Ajax-Integration

をそして、これらのスタックオーバーフローの質問/答えは私の使用のために古すぎるか、私を助けていない:

How to integrate Ajax with Symfony2

How to make a POST Ajax request with Symfony and Jquery

twig:

AJAX:コントローラで

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $(document).on('click', "#begin-check", function(e){ 
      console.log('You have clicked'); 
      e.preventDefault(); 
      $.ajax({ 
       method: 'POST', 
       url: "{{ path('control_check') }}", 
       data: { //research what to put here 
       }, 
       success: function(responseData){ 
        //run the controller code 
        //Show HTML table 
       }, 
       error: function (xhr, ajaxOptions, thrownError) { 
        console.log(xhr.status); 
        console.log(xhr.responseText); 
        console.log(thrownError); 
       }, 
      }) 
     }); 
    }); 

</script> 

/** 
* 
* @Route("/control", name="control_check") 
* @Template() 
*/ 
public function controlCheckAction() 
{ 
    $request = $this->get('request'); 
    $em = $this->getDoctrine()->getManager(); 

    $persons = array(); 

    //more code 

    return new JsonResponse(array('persons' => $persons)); 

} 
+0

JavaScriptコードは小枝テンプレートですか? –

+0

これは、上から私の小枝と同じファイルにあります – grgre

+0

あなたのJavaScriptの成功関数内のサーバー側のコントローラコードを実行することはできません。成功が呼び出されると、あなたのresponseDataは、controlCheckActionが生成したJSONを持ちます。次に、テーブルをレンダリングするにはjavascriptが必要です。 Symfonyの複雑な問題なしに、ajaxチュートリアルの素晴らしいイントロを見つけることができるかどうかを確認してください。最初に基本を理解する必要があります。 – Cerad

答えて

0

私はあなたがすでに持っているものに追加する必要があるすべてはisXmlHttpRequest()方法だと思います。 Hereは公式の文書です。

ので:おそらく

/** 
* 
* @Route("/control", name="control_check") 
* @Template() 
*/ 
public function controlCheckAction(Request $request) 
{ 
    if ($request->isXmlHttpRequest()) { 
     //$request = $this->get('request'); 
     //replace the up line code with the folloging, which gets a particular form field 
     $name = $request->request->get('name'); // <=> $name = $_POST['name'] 
     $em = $this->getDoctrine()->getManager(); 

     $persons = array(); 

     //more code 

     return new JsonResponse(array('persons' => $persons)); 
    } 
} 
+0

私はコントローラの関数に 'Request $ request'引数を追加するのを忘れてしまったので...ありがとうございますが、' $ request-> request-> get( 'name')とは混乱しています;私のために。私はここで使用するフォームフィールドを持っていません... – grgre

+0

'controlCheckAction()'の 'dump($ request)'だけで、送信ボタンを押した後、何が利用可能かを確認できます。私はあなたが達成しようとしていることを本当に知っていません。通常、テンプレート内には、そのAJAX呼び出しを通じてデータを送信する '

'が存在します。 –

0

、私は同じような状況に遭遇しました。

私の場合、「使用」ステートメントを追加するのを忘れていました。 この行を追加するのを忘れないでくださいか?

use Symfony\Component\HttpFoundation\JsonResponse; 

私はチェックポイントを添付します。 > [ネットワーク]タブ - -

オープンクロムデバッガ(F12)コンソールデバッガをチェック

チェックサーバー側のアプリケーションログ

【1】

error_log("create json response OK" . "\n", 3, "/usr/local/var/log/php/error.log"); 
return new JsonResponse(array('persons' => $persons)); 

【2】> "/コントロール"(左側のナビゲーション)

「レスポンスヘッダー」を確認できます。

[OK] Content-Type:application/json 
[NG] Content-Type:text/html 

"text/html"が見つかった場合は、サーバー側の問題だと思います。あなたは、このプロファイラリンクを開く必要が同じタブに【2】

X-Debug-Token-Link:http://xxxxxxxxx/_profiler/xxxxx 

をSymfony2のデバッガのURLを見つけることができますSymfony2のデバッガ

をチェック

【3】。 この問題がサーバー側から発生した場合、問題が見つかることがあります。

関連する問題