2011-09-26 15 views
6

私はSymfony(バージョン2)の初心者です。私は、基本的なPHPを使ってプロジェクトを完成させました。そして今、私はSymfonyフレームワークを扱うページをやり直しています。そして、私のjquery ajax機能は、確かに、物事はつもり異なること、私はこのように行うために使用 :SymfonyのAjaxとJquery

$("#div").click(function(){ 
    $.post("targetFile.php",{/*parameters*/,function(data){ }); 
}); 

Q:どのようにsymfonyの上で動作しますことを確認しますか? targetFile.phpの代わりに何を挿入しますか?最も可能性の高いルート。 コントローラとルータ側で何をすればよいですか? 私はGoogleとここで見たが、明確な答えは得られなかった。よろしくです。 よろしくお願いします。

+0

何が問題になっていますか? – JamesHalsall

+0

Jquery Ajax関数を作成するにはSymfonyで動作しますか? –

答えて

4

あなたはこのrouting.ymlの内部に設定した場合:

_admin_ajax: 
    resource: "@SomethingAdminBundle/Controller/AjaxController.php" 
    type:  annotation 
    prefix: /admin/ajax 

...とコントローラ股関節の内側に、このAJAX呼び出しを処理します:あなたは

/** 
* @Route("/ajaxhandler", name="_admin_ajax_handler") 
*/ 
public function handlerAction() { 

    $isAjax = $this->get('Request')->isXMLHttpRequest(); 
    if ($isAjax) { 
     //... 
     return new Response('This is ajax response'); 
    } 
    return new Response('This is not ajax!', 400); 
} 

...その後、例えば内部TWIGテンプレート

$("#div").click(function(){ 
    $.post("{{ url('_admin_items_add') }}",{/*parameters*/,function(data){ }); 
}); 

...あなたのアクションの実際のルートはテンプレートで生成されますエンジン。

+0

さて、私はしようとしますが、テンプレートがPHPファイルの場合はどうなりますか?何をURLにするか。 –

+0

これを追加すると、問題が解決しました: '$ isAjax = $ this-> get( 'Request') - > isXMLHttpRequest();本当に私はSymfonyのロジックを理解できません:)、どうもありがとう、 。 –

+0

また、キャッシュをクリアすると影響が出るかもしれませんが、私は何かを変更するたびに常にキャッシュをクリアしていた解決策だとは言えません。 –

5

あなたは本当にあなたのカスタムルートでtargetFile.phpを置き換えなければなりません。

あなたはrouting.ymlでこれを持っているのであれば:

# app/config/routing.yml 
hello: 
    pattern:  /ajax/target 
    defaults:  { _controller: AcmeHelloBundle:Site:index } 

あなたはこのジャバスクリプトを使用することができます:Symfony2の側で

$("#div").click(function(){ 
    $.post("/ajax/target",{/*parameters*/,function(data){ }); 
}); 

、AcmeHelloBundleのSiteControllerのメソッドindexActionを意志呼び出される。

+0

Firebugが私に通知するものを見てください:Not Found要求されたURL /ターゲットがこのサーバー上に見つかりませんでした。私のルータは '' target:pattern:/ target defaults:{_controller:WWBundle:Default:target} 'であり、Javascriptは' $( "#div")です。コントローラは 'public function targetAction(){return $ this-> render( 'WWBundle:Default:target.html.php')、{/ *パラメータ* /、関数(データ){} ); }「何が悪いのですか? –

+0

キャッシュをクリアしようとしましたか? – JamesHalsall

+0

はい、このメッセージが表示されましたが、「NetworkError:404 Not Found - http:// localhost/target」というメッセージが表示されます。 –