Symfony1 在symfony中将json返回到ajax?
在symfony中,我调用了一个操作,希望它将json返回到jQuery前端Symfony1 在symfony中将json返回到ajax?,symfony1,Symfony1,在symfony中,我调用了一个操作,希望它将json返回到jQuery前端 Jobeet教程教授如何返回部分,但我想返回json,而不是部分。便宜的方法: function executeSomethingThatReturnsJson(){ $M = new Model(); $stuff = $M->getStuff(); echo json_encode($stuff); die(); //don't do any view stuff } 更聪明的方法: fun
Jobeet教程教授如何返回部分,但我想返回json,而不是部分。便宜的方法:
function executeSomethingThatReturnsJson(){
$M = new Model();
$stuff = $M->getStuff();
echo json_encode($stuff);
die(); //don't do any view stuff
}
更聪明的方法:
function executeSomethingThatReturnsJson(){
$M = new Model();
$stuff = $M->getStuff();
echo json_encode($stuff);
die(); //don't do any view stuff
}
更聪明的方法是创建一个漂亮的sfActions子类,帮助处理json内容
在我最近做的一个项目中,我创建了一个名为“api”的应用程序(/symfony generate:application-api
)
然后创建了一个文件,如:
api/lib/apiActions.class.php
<?PHP
class apiActions extends sfActions {
public function returnJson($data){
$this->data = $data;
if (sfConfig::get('sf_environment') == 'dev' && !$this->getRequest()->isXmlHttpRequest()){
$this->setLayout('json_debug');
$this->setTemplate('json_debug','main');
}else{
$this->getResponse()->setHttpHeader('Content-type','application/json');
$this->setLayout('json');
$this->setTemplate('json','main');
}
}
}
setLayout('json_debug');
$this->setTemplate('json_debug','main');
}否则{
$this->getResponse()->setHttpHeader('Content-type','application/json');
$this->setLayout('json');
$this->setTemplate('json','main');
}
}
}
注意,我在那里显式地设置了模板
因此,我的jsonSuccess.php模板很简单:
<?PHP echo json_encode($data);
然后,您可以拥有一个扩展apiActions(而不是通常的sfActions)的控制器,该控制器如下所示:
<?php
class myActions extends apiAction {
public function executeList(sfWebRequest $request)
{
$params = array();
if ($request->hasParameter('id')){
$id = $request->getParameter('id');
if (is_numeric($id)){
$params['id'] = $id;
}
}
$data = Doctrine::getTable('SomeTable')->findAll();
$this->returnJson($data);
}
}
return new Response(json_encode($data), 200, array('Content-Type', 'text/json'));
如果您只是从一个普通的AJAX操作返回它,我想我在过去的某个地方使用过以下内容:
return $this->renderText(json_encode($something));
仅供参考:在Symfony 2.x的情况下,“快速且肮脏”的方式如下所示:
<?php
class myActions extends apiAction {
public function executeList(sfWebRequest $request)
{
$params = array();
if ($request->hasParameter('id')){
$id = $request->getParameter('id');
if (is_numeric($id)){
$params['id'] = $id;
}
}
$data = Doctrine::getTable('SomeTable')->findAll();
$this->returnJson($data);
}
}
return new Response(json_encode($data), 200, array('Content-Type', 'text/json'));
返回新的JsonResponse(数组) 这真的很有趣:)你贴了很多代码,但之前的答案只有一行,而且很有效:)1+表示你很想帮忙!:)对——另一个答案是“廉价方式”的更好版本。我的回答的其余部分是关于根据环境以不同的方式处理问题,尽管我相信这可以做得更干净。如果在开发模式下web调试栏处于活动状态,则必须添加行“sfConfig::set('sf_web_debug',false);”这将在响应体中返回json,但内容类型将是text/html。添加$this->getResponse()->setContentType('application/json')
我认为如果您的路由指定了良好的格式(默认值:{u控制器:您的:操作,{u格式:json}
),您甚至可以放置响应(json\u encode($data))
)