2012-04-29 9 views
0

私はPHPのケーキ1.1でAPIを開発しています。私はJSONとしてレスポンスを書いています。私はPHP Cake 1.2または1.3では多くのコンテンツを見つけましたが、1.1ではそうではありませんでした。CakePHP 1.1 - どのようにJSONでの応答

ここにここに私のコントローラのコード

function index() { 
    $this->layout = 'ajax'; 
    $this->RequestHandler->setContent('json', 'application/json'); 
    $members['id'] = '001100';   
    $this->set(compact('members'));  
} 

は、ビューのコードは、私の問題は、応答のコンテンツタイプがまだContent-Type: text/html

である、ということである

echo json_encode($members);

ですIどのような方法があります各機能のビューを作成する必要はなく、単にjsonと記述してください。

私を助けてください。

おかげで、 アディル

+0

なぜ2.1にアップグレードしないのですか?このAPIの開発を開始すると、おそらく1.1がおそらく使用できる最悪のバージョンです(それ以来、特にこの分野では大幅に改善されています)。アップグレードが私のお勧めです。また、 "phpcake"ではなく "cakephp"です。 – mark

+0

実際、私のウェブサイトはすでにcakephp 1.1で開発されており、2.1へのアップグレードは良い選択です。しかし、それは多くの努力が必要です。 –

答えて

0

私は疑問に100%理解していないですが、あなたは単にJSON文字列に出力何かしようとしている場合は、このリンクを見てみましょう:

http://techno-geeks.org/2009/08/easy-json-with-cakephp-and-jquery/

+0

返事ありがとう、具体的にさせてください。 ここに私のコントローラコード function index(){ \t \t $ this-> layout = 'ajax'; \t \t $ this-> RequestHandler-> setContent( 'json'、 'application/json'); \t \t $メンバー['id'] = '001100'; \t \t $ this-> set(compact( 'members')); \t \t ここにビューコードがあります。 <?php echo json_encode($ members); ?> 私の問題は、レスポンスのコンテンツタイプはまだContent-Type:text/html –

0

これを試してみてください:

function index() { 
    $this->autoRender = false; 
    /** 
    * leave this two lines 
    * 
    * $this->layout = 'ajax'; // leave it 
    * $this->RequestHandler->setContent('json', 'application/json'); 
    * 
    */ 

    // your process to get $members 
    $members['id'] = '001100';   
    $this->set('members');  
} 

あなたのビューコードは問題ありません。

1

CakePHP 1.2では、autoRenderをfalseに設定してコントローラアクションから値を返すと、直接出力されます。おそらくContent-Typeを特定する必要があります。

アクションのリターンがあることを確認するために、特に、_invoke()メソッドをdispatcher.phpをチェックする必要があるかもしれないので、私は、CakePHPの1.1のコードベースへの即時アクセスを持っていない
function index() { 
    $this->autoRender = false; 
    $this->RequestHandler->respondAs('json'); // or $this->RequestHandler->respondAs('application/json'); if json is not set up with CakePHP 1.1 
    $members['id'] = '001100';   
    return json_encode($members);  
} 

autoRenderがfalseに設定されている場合はechoします。

私は、Json応答を提供するために使用できるJsonViewを含むCakePHP 2.1へのアップグレードを強く勧めます。

function index() { 
    $this->view = 'Json'; 
    $members['id'] = '001100'; 
    $this->set(compact('members'));   
    $this->set('_serialize', array('members'));  
} 
+0

です。これは素晴らしい解決策です。これは、ビューの必要性を取り除くことによって大きく役立ちます。 – Bearwulf