3

コントローラで使用しているAJAX関数ごとにビューを作成しないようにしています。(結果のデータを操作することはなく、ほとんどの場合、ブール値にすぎないため)

コントローラでRequestHandlerコンポーネントを使用しています。

var $components = array('RequestHandler');

そして私はこれを追加しましたroutes.php

Router::parseExtensions('json');

この関数を機能させようとしていますが、次のnull値が得られます。

public function test(){
    $this->layout = 'ajax';

    $result = '1';
    $this->set('_serialize', $result);
}

json関数のバージョンにアクセスするには、このURLを使用し.jsonて、ビューの読み込みを回避します。

http://localhost/cakephp/demoController/test.json

私はCakePHPドキュメントの手順に従っています:http: //book.cakephp.org/2.0/en/views/json-and-xml-views.html#json-and-xml-views

私は何が間違っているのですか?期待どおりの結果が得られず、代わりにnull

また、次のように配列をシリアル化しようとすると、次のようになります。

$result = array('demo' => '1');
$this->set('_serialize', $result);

私はこの通知を受け取っています:

注意(8):未定義のインデックス:1 [ CORE \ Cake \ View \ JsonView.php89行目]コードコンテキスト                $data = array();                 foreach ($serialize as $key) {                     $data[$key] = $this->viewVars[$key];$ view = null $ layout = null $ serialize = array('demo' => '1')$ data = array()$ key = '1' JsonView :: render()-CORE \ Cake \ View \ JsonView.php、89行目Controller :: render()-CORE \ Cake \ Controller \ Controller.php、957行目ディスパッチャー:: _invoke()-CORE \ Cake \ Routing \ Dispatcher.php、行193 Dispatcher :: dispatch()-CORE \ Cake \ Routing \ Dispatcher.php、行161 require-APP \ webroot \ index.php、行92 [main] --ROOT \ index.php、42行目{"1":null}

4

4 に答える 4

4

ドキュメントを理解している限り、ビュー変数を指定し、_serializeキーを使用するときにこの変数を参照する必要があります。これは、スニペットが次のようになることを意味します。

$result = '1';
$this->set('theResult', $result);
$this->set('_serialize', array('theResult'));
于 2012-12-10T16:22:13.127 に答える
1

.jsonURL とファイルのRouter::parseExtensions('json');行に拡張子がないroutes.phpため、@dhofstet の回答はうまくいきませんでした。

renderAs()私の解決策は、呼び出しを追加することでした:

public $components = array('RequestHandler');

public function my_ajax_action() {
    // do something
    $result = '1';
    $this->set('result', $result);
    $this->set('_serialize', array('result'));
    $this->RequestHandler->renderAs($this, 'json');
}
于 2015-07-11T20:06:23.543 に答える
-1

要素を作成してレンダリングすることができます。

function test() {
    $this->autoRender = false;

    $result = array('demo' => '1');

    $this->set(compact('result'));
    $this->set('_serialize', array('result'));
    $this->render(DS.'Elements'.DS.'element_name');
}

ドキュメントを参照してください

于 2012-12-10T14:53:50.563 に答える
-3

最も簡単な方法はこれです。私にとってはうまくいきます。

public function fun() {
    $this->autoRender = false;
    $this->request->onlyAllow('ajax');

    $result = array('data1' => 'hello', 'data2' => 'world');

    return json_encode($result);
}
于 2015-04-22T05:23:34.157 に答える