. cakephp, jquery, ajax (), dataType: json

5 Cevap php

is it possible to be able to do without a view for a cakephp controller function? i am trying to have my server return a datatype that is not a string - but an array

my controller function :


    function test() {
      $this->layout = 'plain';
      $task['Numbers']['uno'] = 'mooo';
      $task['Numbers']['dos'] = 'says the cow';
      $result = json_encode($task);
      $this->set('result', $result);
    }

my view file test.ctp



    echo $result;


my jquery:



    $('#test').live('click', test);

    function test() {

        var data = $('#form').serialize();

        $.ajax({
        type: "post",
        url: "/controller/test",
        data: data,
        dataType: 'json',
        success: function(response){    		
        alert(response.Numbers.uno);
        }
        });

    }

clicking on the html element marked test doesn't give me anything. however if i take out

dataType: 'json', 

and change
alert(response.Numbers.uno);
to
alert(response);

in my jquery - i get an alert: the json encoded data but as a string (
alert(typeof response);
)

does anyone have any idea what might be happening?

5 Cevap

İlk olarak, soru cevap, evet bir görünüm olmadan yapabilirsiniz (ve bu bunu yapmak için iyi bir durumdur). Denetleyicisi eylem (test, bu durumda), sadece set $this->autoRender = false;. Ben genelde ne olduğunu ve sadece denetleyici kendisi kodlanmış JSON dize echo. Az bu şekilde yığılmayı.

Ben bakmak istiyorum sonraki şey config.php daki hata ayıklama ayarları vardır. 0'a set değilse, bu sorun olduğunu çok iyi bir şans var. Sizin echo ifadesi JSON biçimli dize yankılanan, ama buna hata ayıklama çıktı ekleme olabilir. Yöntemde, sadece Configure::write ( 'debug', 0 ) içerir. Bu hata ayıklama devre dışı bırakır only for the current request. Ben genellikle aslında benim AppController bunu:

if ( $this->RequestHandler->isAjax() ) {
   Configure::write ( 'debug', 0 );
}

Kundakçı gibi bir araç meşgul ve ajax isteği ne oluyor görmek istiyorum. Bu, bu istekleri izlemek ve incelemek için istek ve yanıt başlıklarını sağlayacaktır. O yardımcı olabilir. Ikincisi problemi varsa, o Kundakçı size cevap başlıklarında göstermiştir olurdu.

Ben app Controller'daki ayıklama ayarı hariç, Rob katılıyorum. Eğer app denetleyicisi belirli bir işlev için bir şey ayıklamak istediğiniz her zaman hata ayıklama seviyesini ayarlamak zorunda çünkü bana biraz can sıkıcı olur. Ben içeri çalışıyorum denetleyicisi gibi bu benim işleyicisi yazmak

Configure::write('debug', 0);
$this->autoRender = false;

Ayrıca ben firebug kullanımı ile katılıyorum. Kundakçı ile yapmanız gereken tüm açık kundakçı olduğunu, konsol üzerinde tıklatın ve sonra da testi çalıştırın. Bu, jquery ile ne yaptığımızı anlatmak ve sonuçlar verecektir.

Talep taşınması üzerine cakePHP kitap kontrol:

http://book.cakephp.org/view/174/Request-Handling

CakePHP json dönmek denetleyicisi yöntemleri ele işlevselliği yerleşik bazı vardır.

You have to transform the data before use it.
See this answer:

jQuery ajax request with json response, how to?

Eğer kullanmak zorunda

var json = $.parseJSON(response);
alert(json.Numbers.uno);

Ben sadece kullanmak

die(json_encode(array('success' => true, 'result' => $result)));

denilen denetleyici yöntemin sonunda ve benim için çalışıyor.