2012-03-24 9 views
5

私は新しいCakePHP 2.1を使用しています.JsonViewを使用して、コントローラがクライアント側でjQueryによって作成されたAJAX要求に応答するようにしたいと考えています。CakePHP 2.1 JsonView

ただし、これはドキュメントに従ってJsonViewで自動的に行われる必要があります。

http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

私はroutes.phpのファイルに

Router::parseExtensions('json'); 

をこの行を追加し、私のコントローラで私は

$this->RequestHandler->setContent('json', 'application/json'); 
$bookings = $this->Bookings->find('all'); 

$this->set('bookings', $bookings); 
$this->set('_serialize', 'bookings'); 

次にビューは廃止する必要がありますが、私が呼ぶときこれは、欠けているビューを指しているページを依然として提供します。

+0

あなたは明示的に 'アプリケーション/ json'を設定する必要はありませんのでご注意ください。 –

答えて

5

あなたが呼んでいるURLは「.json」で終わりますか?

+1

これは確かに違いがあります!ありがとう。 .jsonがこれに必要なのはちょっと変わっています... –

+2

問題はありません。しかし、これはもちろん良いことです。したがって、あなたのページへの呼び出しがajax呼び出しであって、どの呼び出しが(例えばawstatsなどで)呼び出されたのかを完全に知ることができます。 今後このような問題に陥らないように、ケーキのコアコードを見てみてください。 varsをダンプしたり、クラスを反映させたりすることで、コントローラのアクションを取得するまで、フレームワークに入るという要求に続いて、フレームワーク自体について多くのことを示します。 ;) もう一度聞くこともできます; P – func0der

0

コントローラのコンポーネントリストに「RequestHandlerComponent」を追加しましたか?

私は他のルートを行って、JSONビューを作成しました:/app/View/Model/json/view.ctp

<?php 
echo json_encode(array(
'success' => TRUE 
)); 

そして、私のコントローラで私が使用:

$this->viewClass = 'Json'; 

よろしく、 James

+0

私はうまくいくかもしれませんが、私はJsonViewで "簡単"なソリューションを探していましたが、以下の答えは余分な見解を時代遅れにしています... –

2

私は、明示的にjsonビューを設定したいCakeにいくつかの問題がありました。 XMLビューは、デフォルトではjsonでなく正常にロードされました。

私は私のAPI関数の中で次のようでした:

if($this->RequestHandler->ext == 'json') { 
     $this->autoRender = false; 
     echo json_encode($results); 
    } else if($this->RequestHandler->ext == 'xml') { 
     $this->set(array(
      'results' => $results, 
      '_serialize' => array('results') 
     )); 
    } 
関連する問題