0

主にこのチュートリアルを使用して、ajax および json-requests 用の Cake php をセットアップしました: http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

すべて正常に動作していますが、ポスト リクエスト (この場合は json-rpc で cakephp を使用する場合) を行うと、Cake は無限ループに入り、データベースに何百もの空のエントリを保存します。 json出力がある限り、完全に空です(505エラーメッセージでも機能します)。これはオートマジックのせいでしょうか?モデルに適合するように適切に設定されたデータを渡すと、データをインテントエンドとして保存できます。しかし、他のもの (たとえば、params や空のデータなど) を送信すると、この無限ループに入ります。

私の投稿にエラーが含まれていたとしても、これはあってはならないと思います。

エラーメッセージは次のとおりです。

<b>Fatal error</b>:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 71 bytes) in <b>/var/www/****/cake/lib/Cake/Controller/Controller.php</b> on line <b>333</b><br />

これがjqueryでの私の呼び出しです:

$.ajax({
        url: '/dezem/cake/users.json', //even if I send the data to user without the json extension, the same happens...
        type: 'POST',
        dataType: 'json',
        data: '{"method": "echo", "params": ["Hello JSON-RPC"], "id": 1}',
        success: function(){alert("YEEHHEHAAW")},
        error: function(){alert("Nööööööööööööööö")}
    })

ここで要求されたように、コントローラー内のコード:

class UsersController extends AppController {
public $helpers = array('Js', 'Html');
public $components = array('RequestHandler');
....

public function index() {       
    $this->User->recursive = -1;

    $users = $this->User->find('all');
    if($this->RequestHandler->isAjax()){
        $this->autoLayout = $this->autoRender = false;      
        if ($this->request->is('post')){
            $this->set(array(
                'data' => $users,
                '_serialize' => array('data')
            ));
            $this->render('/layouts/json');
        }   
        else if ($this->request->is('get')) {           
                $this->set(array(
                   'data' => $users,
                    '_serialize' => array('data')
                ));
                $this->render('/layouts/json');
        }
    }
}
}

私が言ったように、空のコントローラーは同じ結果につながります:

    public function index() {
    }
4

0 に答える 0