Symfony1 在symfony中将json返回到ajax?

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

在symfony中,我调用了一个操作,希望它将json返回到jQuery前端


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))