主にこのチュートリアルを使用して、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() {
}