2012-03-24 19 views
5

Yeni CakePHP 2.1 kullanıyorum ve denetleyicimin, istemci tarafında jQuery tarafından oluşturulan bir AJAX isteğine yanıt vermesini sağlamak için JsonView'ı kullanmak istiyorum. Ancak, bu belgelere göre JsonView ile otomatik olarak yapılmalıdır. CakePHP 2.1 JsonView

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

benim routes.php dosyası

Router::parseExtensions('json'); 

bu satırı eklendi Ve benim denetleyicisi Sonra görünümü eskimiş olmalı

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

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

var ama çağırdığınızda Bu, hala eksik bir görünüme işaret eden bir sayfa sunuyor.

+0

Eğer 'uygulamayı ayarlamanız gerekir/açıkça json' olmadığını unutmayın:

benim API işlevi aşağıdaki yaptı. –

cevap

5

Aramak istediğiniz url '.json' ile biter mi?

+1

Bu gerçekten fark yaratıyor! Teşekkürler. Bunun için .json'un, seo ... –

+2

için yeniden yazmayı destekleyen bir çerçevede bunun için gerekli olması biraz garip. Ama bu elbette iyi bir şey. Dolayısıyla, sayfanıza yapılan bir çağrının ajax araması olduğunu ve hangisinin (örneğin, awstats veya benzeri) olmadığını mükemmel bir şekilde biliyorsunuzdur. Gelecekte bu tür sorunların üstesinden gelmemesi için kekin ana koduna bakmaya çalışın. Bir denetleyicideki eylemi ele almak, varsayıma dökmek veya sınıfları yansıtmak suretiyle, bir denetçiye girmeden, çerçevenin kendisiyle ilgili çok şey gösterir. ;) Ama yine de sorabilirsiniz, P – func0der

0

Denetleyicinizin bileşen listesine "RequestHandlerComponent" eklediniz mi?

diğer rota gitti ve bir JSON görünümü oluşturulur: /app/View/Model/json/view.ctp

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

Ve Kontrolör ben kullandı:

$this->viewClass = 'Json'; 

Saygılar , James

+0

Mitti, ama ben JsonView ile "kolay" çözüm arıyordum, aşağıdaki yanıtı gereksiz bir görünüm yapar ... –

2

Cake ile json görünümünü açıkça ayarlamamı isteyen bazı sorunlar yaşadım. XML görünümü, varsayılan olarak json değil, varsayılan olarak yüklendi.

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') 
     )); 
    }