Yii json formatında (uygulama / json) olarak cevap almak nasıl?

4 Cevap php

Yii json formatında (uygulama / json) olarak cevap almak nasıl?

4 Cevap

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.

ActionJson (): Eğer JSON veri, örneğin işlemek istiyorum denetleyici eylem olarak

public function actionJson(){
    $this->layout=false;
    header('Content-type: application/json');
    echo CJSON::encode($data);
    Yii::app()->end(); // equal to die() or exit() function
}

Daha Yii API bakın

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