Yii json formatında (uygulama / json) olarak cevap almak nasıl?
kullanarak bir daha basit bir yolu
echo CJSON::encode($result);
Örnek kod:
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);
}
}
şerefe :)
Yii::app()->end()
Ben, PHP'nin exit() fonksiyonunu kullanır cadı yürütme akışı anında çıkış anlamına gelir çünkü bu çözüm, uygulama akışını sona erdirmek için en iyi yol olmadığını düşünüyorum. Evet, Yii en onEndRequest işleyicisi var ve PHP'nin register_shutdown_function ama hala çok kaderci kalır.
Benim için daha iyi bir yolu budur
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;
}
Bu nedenle, uygulama akış sonra bile yürütmek için devam eder.
Lütfen (baz) Controller bu işlevi oluşturun:
/**
* 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();
}
Sonra sadece eylem sonunda çağırır:
$this->renderJSON($yourData);