2011-09-26 41 views
6

我在Symfony的(第2版)初學者,我有一個項目,用普通基本的PHP實現,而現在我重做我在處理Symfony框架的網頁,並且到達了我的jQuery AJAX功能,當然,事情會有所不同, 我曾經這樣做:的Ajax和jQuery在Symfony的

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

問:如何使上Symfony的作品? 要放什麼而不是targetFile.php?最有可能的路線。 以及在控制器和路由器兩端做什麼? 我看着谷歌和這裏,但沒有得到任何明確的答案。 此致敬禮。

+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文件呢?作爲網址放置什麼。 –

+0

並稱,解決了這個問題:'$ isAjax = $這個 - >獲取( '請求') - > isXMLHttpRequest();'我真的不明白,Symfony的邏輯:),任何方式,謝謝你,我感謝您的支持BRO 。 –

+0

同時也清除緩存可能會影響,我不能說這是解決方案因爲我每次改變某些東西時總是清除緩存。 –

5

你真的只需要通過你的自定義路由,以取代targetFile.php。

所以,如果你有這樣的在你的routing.yml:

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

您可以使用此javascript:

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

在Symfony2的一面,AcmeHelloBundle的SiteController的方法的indexAction會叫做。

+0

看看Firebug告訴我:未找到在此服務器上未找到請求的URL /目標。而我的路由器是:'target:pattern:/ target defaults:{_controller:WWBundle:Default:target}'並且我的Javascript是'$(「#div」)。click(function(){$ .post(「/ target 「,{/ *參數* /,函數(數據){});});'和控制器是'公共功能targetAction(){返回$ this-> render('WWBundle:Default:target.html.php' ); }有什麼不對的達米安先生? –

+0

嘗試清除緩存? – JamesHalsall

+0

是的,我做了,但仍然得到這個消息:「NetworkError:404 Not Found - http:// localhost/target」。 –