2016-04-06 21 views
0

Görünümümden basit bir AJAX isteği göndermeye çalışıyorum ve bunu yapmak için cakePHP'nin JSON görünümünü kullanıyorum ancak yapamıyorum denetleyicinin bir ctp dosyası aramasını önlemek için _serialize olsun - sürekli olarak "Durum 500: dosyayı görüntüle ..." hatası alıyorum. Stackoverflow üzerinde dokümanlar ve birkaç benzer soruları okudum ve neyi kaçırdığımı göremiyorum.CakePHP 2.5.3 Durum 500 - JsonView _serialize kullanırken görünüm dosyası eksik

Ben AppController benim initialize işlevine RequestHandler ekledik:

public function initialize() { 
    $this->loadComponent('RequestHandler'); 
} 

etkin uzantıları: Ben kontrolöre bileşeni ekledik

Router::parseExtensions('json'); 
require CAKE . 'Config' . DS . 'routes.php'; 

:

class StudentsController extends AppController { 
    public $name = 'Students'; 
    public $components = array('RequestHandler'); 

Bunu değiştiren tek şey, aşağıdaki kodu AppController'a eklediğimde

$this->RequestHandler->renderAs($this, 'json'); 
$this->response->type('application/json'); 
$this->set('_serialize', true); 

Bu benim denetleyicisi yöntemidir:

public function set_rating() { 
    $this->autoLayout = false; 
    $this->autoRender = false; 
    $this->response->type('application/json'); 

    $studentID = (int) $this->request->data['studentID']; 
    $rating = (int) $this->request->data['rating']; 

    $this->Student->id = $studentID; 
    if($this->Student->saveField('rating', $rating)) { 
     $this->set('success', 1); 
    } 
    else{ 
     $this->set('success', 0); 
    } 
    $this->set("_serialize", array("success")); 
} 

ve Ajax isteği:

$.ajax({ 
    url: '<?php echo $this->webroot . $this->params["controller"]; ?>/set_rating.json', 
    type: "POST", 
    dataType: "json", 
    data: {studentID: text, rating: value}, 
    success: function(response) { 
     if(response['success'] == 1){ 
      manageFlashMessage('alert-success', 'Rating saved.'); 
     } 
     else { 
      manageFlashMessage('alert-danger', 'Sorry, something went wrong'); 
     } 
    }, 
    error: function (xhr, status, error) { 
     console.log(xhr.status); 
     console.log(xhr.responseText); 
     console.log(status); 
    } 
}); 

Yapamam - beforeFilter yöntemi sadece "boş" sözcüğünü vermektedir neyi kaçırdığımı gör! Herhangi bir fikir?

cevap

0

Benzer bir bağlamda aynı hata mesajını aldım; Benim durumumda, aramaya çalıştığım yöntemin 'un Yetkilendirilmiş işlevinden geçmemesi gerçeğiydi. Bu nedenle, json formatında görüntülenmesi amaçlanmayan başka bir yönteme yönlendirildi ve "Durum 500: dosyayı görüntüle ..." hatası mesajı geldi.

Yalnızca yetkilendirilmiş işlev içinde json yöntemim için uygun istisnayı eklemeliydim ve bunu düzeltdim.

Bu tür hataların hatalarını ayıklamak için, bir ajax çağrısı yoluyla doğrudan URL'ye erişmeye çalışılabilir, çünkü ilgili izin hatası iletisi görüntülenir.

+0

Tam olarak ne olduğu ortaya çıktı - kullanıcı türünün yeni modele erişmesine izin vermeyi unuttuğum bir yer vardı. Bir aco_sync onunla ilgilenirdi. Her zaman küçük şeyler ... –