yii2.0框架报错

报错内容

exception 'yii\web\HeadersAlreadySentException' with message 'Headers already sent in E:\project\components\BaseController.php on line 112.' in E:\project\vendor\yiisoft\yii2\web\Response.php:366
Stack trace:
#0 E:\project\vendor\yiisoft\yii2\web\Response.php(339): yii\web\Response->sendHeaders()
#1 E:\project\vendor\yiisoft\yii2\web\ErrorHandler.php(135): yii\web\Response->send()
#2 E:\project\vendor\yiisoft\yii2\base\ErrorHandler.php(111): yii\web\ErrorHandler->renderException(Object(yii\web\HeadersAlreadySentException))
#3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\HeadersAlreadySentException))
#4 {main}
Previous exception:
exception 'yii\web\HeadersAlreadySentException' with message 'Headers already sent in E:\project\components\BaseController.php on line 112.' in E:\project\vendor\yiisoft\yii2\web\Response.php:366
Stack trace:
#0 E:\project\vendor\yiisoft\yii2\web\Response.php(339): yii\web\Response->sendHeaders()
#1 E:\project\vendor\yiisoft\yii2\base\Application.php(656): yii\web\Response->send()
#2 E:\project\components\BaseController.php(113): yii\base\Application->end()
#3 E:\project\controllers\ClueController.php(329): app\components\BaseController->backToJson(0, Array, '\xE6\x93\x8D\xE4\xBD\x9C\xE6\x88\x90\xE5\x8A\x9F')
#4 [internal function]: app\controllers\ClueController->actionAjaxlist()
#5 E:\project\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#6 E:\project\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#7 E:\project\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('ajaxlist', Array)
#8 E:\project\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('clue/ajaxlist', Array)
#9 E:\project\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#10 E:\project\web\index.php(20): yii\base\Application->run()
#11 {main}

报错原因

在action中运行echo,var_dump等方法后没有中断,yii1.0中Ajax方法返回数据可以直接通过echo获取,但是yii2.0的Response类中增加了对于返回输出信息的定义,所以当echo后没有中断程序,yii自带的代码就会出错,不过目前我发现的情况是,只有在返回的数据结构复杂的情况下才会出错,尤其是数据中存在json字符串这种形式。

解决方案

  1. 在echo输出给页面信息后,打断点
  2. 用return代替echo等输出
public fucntion actionTest()
{
	//此方法为ajax访问方法
	$data = array(
		'a' => 1,
		'b' => json_encode(array(1,2,3))
	);
	echo json_encode($data);die;//这种方法是可行的,也是yii1.0中常用的输出方法
	return json_encode($data);//这种方法也能得到数据,这里推荐使用这种方法
}

有两个问题我没有搞清楚原因是什么:

  1. 简单的数组为什么可以正常输出,复杂的数组输出就会有问题
  2. 为什么在浏览器直接访问方法并不会报错,用Ajax调用就会报错
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael·Ren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值