2012-12-10 49 views
0

這是我第一次在Symfony上下文中涉及Ajax,我可能會對如何組織代碼感到困惑。Symfony和Ajax

比方說,我的AJAX調用看起來是這樣的:

$.getJSON('module/getMeSomeJSONThroughAjax', function(data) {console.log(data); }) 

,並在我的模塊/動作文件夾時,actions.class.php文件裏的有一個方法:

public function getMeSomeJSONThroughAjax() 
{ 
    // do something 
    return $jsonEncodedString; 
} 

請記住,我是not creating a template for the above method,因此我沒有執行前綴作爲大多數其他操作會。簡而言之,我不認爲創建一個模板是一個矯枉過正的例子,它只提取AJAX HTTP請求的JSON數據。

然而,當發生在我的瀏覽器觸發Ajax調用的事件,我的控制檯記錄以下:

> Failed to load resource: the server responded with a status of 404 
> (Not Found) 
> http://localhost:8080/customerview_dev.php/flashcard/getMeSomeJSONThroughAjax 

我察覺這是一個路由問題。簡單地擺脫問題的一種可能的方法是爲上述創建一個模板並將該操作重命名爲executeGetMeSomeJsonThroughAjax()。但正如我所提到的,這個恕我直言,是過分殺傷,必須有一個更美學和正確的方式來完成這件事。

Symfonians爲做Ajax調用做些什麼?

+0

提示:如果您沒有遺留問題,請堅持使用Symfony2。 – moonwave99

+0

認真嗎?你希望我移動到Symfony 2是因爲ajax jquery問題... ajax在symfony的所有版本中都能正常工作,並且有很多生產網站 –

+0

Symfony 2更好[def],如果你需要開始一個工作從頭開始,使用過時的框架是沒有意義的。正如我明確指出的那樣,如果您需要維護舊版代碼,那麼您必須堅持舊版本。 – moonwave99

回答

2

即使您沒有模板,您仍然需要執行前綴。 您可以將模板設置爲無,如果你想,或者:

return $this->renderText($jsonEncodeString); 

應該工作了。

0

這樣做的想法是:

控制器:

命名空間的東西;

使用Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller;使用 Symfony \ Component \ HttpFoundation \ Response;

類AjaxController延伸控制器{ 公共函數doSometingInAjaxAction() { $請求= $這 - > Request()方法; $ id = $ request-> get('id');
$ em = $ this-> getDoctrine() - > getManager(); $ object = $ em-> getRepository('Bundle:Bundle') - > find($ id); $ objectJson = json_encode($ object);
返回新的響應($ modelosJson);
}}

的觀點:

$(文件)。就緒(函數(){ // ... $。AJAX({ URL: '{{路徑(' admin_ajax_ajax ')}}', 數據:ID, 成功:功能(響應) { //成才 } }); });

路由器

admin_ajax_ajx: 路徑:/ A /過冷/路徑// 默認:{_controller:捆紮:Ajax的:doSometingInAjax}

這是底座和工作對我來說

關注:)