php renderjson,php-如何在yii中以json格式(application / json)获取响应?

php-如何在yii中以json格式(application / json)获取响应?

如何在yii中以json格式获取响应(application / json)?

tq0fqeu asked 2020-01-28T05:49:54Z

8个解决方案

86 votes

对于Yii 1:

在(基本)控制器中创建此函数:

/**

* Return data to browser as JSON and end application.

* @param array $data

*/

protected function renderJSON($data)

{

header('Content-type: application/json');

echo CJSON::encode($data);

foreach (Yii::app()->log->routes as $route) {

if($route instanceof CWebLogRoute) {

$route->enabled = false; // disable any weblogroutes

}

}

Yii::app()->end();

}

然后只需在操作结束时致电:

$this->renderJSON($yourData);

对于Yii 2:

Yii 2内置了此功能,在控制器操作结束时使用以下代码:

Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

return $data;

marcovtwout answered 2020-01-28T05:50:24Z

18 votes

$this->layout=false;

header('Content-type: application/json');

echo CJavaScript::jsonEncode($arr);

Yii::app()->end();

Neil McGuigan answered 2020-01-28T05:50:39Z

15 votes

对于控制器内的Yii2:

public function actionSomeAjax() {

$returnData = ['someData' => 'I am data', 'someAnotherData' => 'I am another data'];

$response = Yii::$app->response;

$response->format = \yii\web\Response::FORMAT_JSON;

$response->data = $returnData;

return $response;

}

Sergey Onishchenko answered 2020-01-28T05:51:00Z

9 votes

$this->layout=false;

header('Content-type: application/json');

echo json_encode($arr);

Yii::app()->end();

tq0fqeu answered 2020-01-28T05:51:16Z

5 votes

class JsonController extends CController {

protected $jsonData;

protected function beforeAction($action) {

ob_clean(); // clear output buffer to avoid rendering anything else

header('Content-type: application/json'); // set content type header as json

return parent::beforeAction($action);

}

protected function afterAction($action) {

parent::afterAction($action);

exit(json_encode($this->jsonData)); // exit with rendering json data

}

}

class ApiController extends JsonController {

public function actionIndex() {

$this->jsonData = array('test');

}

}

Andrey Mischenko answered 2020-01-28T05:51:31Z

0 votes

使用一种更简单的方法

echo CJSON::encode($result);

示例代码:

public function actionSearch(){

if (Yii::app()->request->isAjaxRequest && isset($_POST['term'])) {

$models = Model::model()->searchNames($_POST['term']);

$result = array();

foreach($models as $m){

$result[] = array(

'name' => $m->name,

'id' => $m->id,

);

}

echo CJSON::encode($result);

}

}

欢呼:)

Developer answered 2020-01-28T05:52:01Z

0 votes

在您要呈现JSON数据的控制器操作中,例如:actionJson()

public function actionJson(){

$this->layout=false;

header('Content-type: application/json');

echo CJSON::encode($data);

Yii::app()->end(); // equal to die() or exit() function

}

查看更多Yii API

Truongnq answered 2020-01-28T05:52:25Z

-1 votes

Yii::app()->end()

我认为此解决方案不是结束应用程序流的最佳方法,因为它使用了PHP的exit()函数,女巫意味着立即退出执行流。 是的,有Yii的onEndRequest处理程序和PHP的register_shutdown_function,但它仍然太致命了。

对我来说更好的方法是

public function run($actionID)

{

try

{

return parent::run($actionID);

}

catch(FinishOutputException $e)

{

return;

}

}

public function actionHello()

{

$this->layout=false;

header('Content-type: application/json');

echo CJavaScript::jsonEncode($arr);

throw new FinishOutputException;

}

因此,即使在此之后,应用程序流程仍继续执行。

Mihailoff answered 2020-01-28T05:52:54Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值