0

私はCake2.1を使用していますが、それに伴って新しいJsonViewが付属しています。私がやりたいのは、コントローラーのメソッドにPOSTし、htmlフラグメントをレンダリングして、jsonの値として返すことができるようにすることです。

以前は、次のようなことをしていました。

public function ajaxSubmit() {
    if (!$this->request->is('ajax')) {
        $this->redirect('/');
    } else {
        $this->autoRender = $this->layout = false;

        $message = 'Please enter a message';
        $this->set('message');
        $errorFragment = $this->render('/Elements/errors/flash_error');
        $toReturn = array('errorFragment' => $errorFragment);
        return json_encode($toReturn);
    }
}

flash_errorこれは、その特定の要素のhtmlフラグメントのみを送り返すためkey => values、標準のjsonオブジェクトで複数を送り返すことはできません。htmlフラグメントとプレーンテキストの両方をjsonとして送信できるようにしたいと思います。

だから私の質問は本当に、Cake 2.1が提供するJsonViewを使用して、HTML要素をレンダリングし、(key => valueペア)でそれをコントローラーからjsonとして返送するように設定するにはどうすればよいですか?ルートファイルにすでに設定しており、AppController内にコンポーネントRouter::parseExtensions('json');を含めています。RequestHandler

4

1 に答える 1

0

データビューを使用する場合、AJAXに対して個別のアクションは必要ありません。使用は、AJAX以外の送信と同じアクションを使用できます。

ただし、他のアクションがどのように見えるかわからないため、AJAXに別のアクションを使用したい場合は、で次のように記述できますapp/View/ControllerName/json/ajaxSubmit.ctp

<?php
$errorFragment = $this->element('errors/flash_error');
$toReturn = array('errorFragment' => $errorFragment);
echo json_encode($toReturn);

次に、アクションをこれに変更します

public function ajaxSubmit() {
    if (!$this->request->is('ajax')) {
        $this->redirect('/');
    } else {
        $message = 'Please enter a message';
        $this->set('message');
    }
}

ドキュメントの「ビューファイルでのデータビューの使用」を参照してください。

于 2012-05-30T02:02:57.773 に答える