2010-08-25 10 views
5

Ich bin neu in CakePHP, bin aber kurz davor, es zu beenden, weil ich jQuery nicht mehr damit arbeiten kann.Kein Glück bei der Verwendung von JQuery mit CakePHP 1.3

Ich benutze CakePHP 1.3 und dachte, die Html und Js Helfer hätten Javascript und Ajax überflüssig gemacht, aber ich kann keine Hilfe/API Dokumentation finden, wie man Js verwendet, die ausreichend ist.

Alles, was ich zuerst tun will, ist einige Daten zu cakePHP mit jQuery zu senden und dann einige Daten zurück in jQuery und alert() zu bekommen. Aus irgendeinem Grund funktioniert das einfach nicht. Hier ist mein Code:

test.js

$('.social').click(function() 
{ 
    $.ajax({ 
     type: 'POST', 
     url: '/activities/add_activity', 
     data: 'type=social', 
     dataType: 'json', 
     success: function(data) 
     { 
      alert(data); 
     }, 
     error: function() 
     { 
      alert('wut'); 
     } 
    }); 
}); 

activities_controller.php

function add_activity() 
{ 
    if($this->RequestHandler->isAjax()) 
    { 
     $this->autoRender = false; 
     $this->autoLayout = false; 

     $this->header('Content-Type: application/json'); 

     echo json_encode(array('result'=>'hello'); 
     return; 
    } 
} 

Jedes Mal, wenn ich auf die Schaltfläche mit Klasse Anklicken = 'sozialen' ich die Warnung "wut" erhalten, was bedeutet, Error.

Ich habe die RequestHandler-Komponente und Javascript, Js und Ajax-Helfer in meiner activities_controller.php enthalten.

Auch test.js und jquery.js ist mit html-> script() verknüpft; in default.ctp und alle anderen jQuery Sachen funktionieren, also ist es nicht so.

Ich habe dies auch in meinem before() für activities_controller.php bekam:

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

Irgendwelche Ideen, was falsch ist? Ist es eine jQuery-Sache oder eine cakePHP-Sache? Oder beides?

Vielen Dank im Voraus,

Infinitifizz

P. S.

Ich habe noch nie AJAX in jQuery gemacht, also ist es vielleicht etwas damit zu tun, dass es versaut, ich habe immer nur einfaches Javascript AJAX gemacht.

+2

Dies ist eine der Zeiten, in denen es wirklich hilfreich wäre, Debug aktiviert zu haben - speziell auf eine Stufe von "1", wenn es PHP-Fehler gibt. Versuchen Sie, diese Stufe für Ajax-Anfragen zu aktivieren und sehen Sie, ob in Ihren Cake-Logs etwas gemeldet wird ('/ app/tmp/logs/*'). –

+0

Versuchen Sie, dies in Ihre Cake-Methode aufzunehmen: $ this-> log ('Eine Debugging-Nachricht.', LOG_DEBUG); um zu sehen, ob die Methode aufgerufen wird. Überprüfen Sie die Ausgabe in app/tmp/logs/debug.log. Beachten Sie, dass Sie Variablen übergeben können - sogar Arrays anstelle der Nachrichtenzeichenfolge. – Leo

+1

Verwenden Sie Firebug in Firefox, um die Netzwerkaktivität zu überwachen (auf der Registerkarte "net"). – Leo

Antwort

3

Gib nicht auf CakePHP auf. Es gibt eine Lernkurve, aber es ist es wert.

Ich würde die URL wie folgt angeben:

<?php $Url = Router::url(array('controller'=>'activities','action'=>'addActivity'),true); ?> 
$('.social').click(function() 
{ 
    $.ajax({ 
     type: 'POST', 
     url: '<?php echo $Url ?>'; 
     ... 

Auf der CakePHP Seite würde meine Methode wie folgt sein:

function addActivity() 
{ 
    $this->autoRender = false; 
    $this->autoLayout = false; 

    App::import('Helper', 'Javascript'); 
    $javascript = new JavascriptHelper(); 

    echo($javascript->object(array('result'=>'hello'))); 
    exit(1); 
} 

ich if($this->RequestHandler->isAjax()) nie verwenden, obwohl ich sicher bin, eine Art Seele wird mir sagen, warum ich sollte.

Ich bevorzuge CamelCase Methodennamen im Einklang mit CakePHP Konvention.

Beachten Sie, dass diese Zeile in Ihrem Code: echo json_encode(array('result'=>'hello'); eine schließende Klammer fehlt.

Auch würde ich jQuery nicht verwenden, um einfache AJAX so zu machen - es kann es schwierig machen zu debuggen, aber das ist nur persönliche Vorliebe.

1

Dies ist wahrscheinlich offtopic, aber ...

Was ich tun, um die Anwendung des Wurzel in meinem Javascript zu haben:

Im /app/views/layout/default.ctp Ich habe folgenden Code

<?php 
echo $javascript->codeBlock("var root = '".$html->url('/')."';"); 
?> 

Ihre Parameter url aussehen wird wie:

url: root+'activities/add_activity', 

auf diese Weise, auch wenn Sie app in einem Unterordner oder in einer TLD Domain wird das Skript ordnungsgemäß funktionieren.

Die Rückgabe von "wut" für mich bedeutet, dass das Skript die Seite in Ihrem URL-Parameter nicht erreichen konnte. Besonders, wenn Sie in einem Unterverzeichnis arbeiten, wird es in http://server.com/activities/add_activity aussehen. Ich bin 99% sicher, dass dies das Problem :)

ist

Ein weiterer Vorschlag: Entfernen Ajax während it was meant to work with Prototype eher mit jQuery

+0

Ah! Vielen Dank! Sorry für die späte Antwort alle, ich war in der letzten Woche weg, aber danke Nik, ich bin zumindest deswegen da! Es ruft jetzt die Funktion auf, nachdem ich diese Zeile zu default.ctp hinzugefügt habe, aber ich bekomme immer 'wut' zurück, also bedeutet das zumindest, dass jQuery läuft, aber immer den Fehler bekommt ... irgendwelche Tipps, was als nächstes zu tun ist? –

+0

Oh, fast vergessen, ich habe auch die Funktion add_activity geändert, um $ this-> javascript zu verwenden ... wie Leo vorher gesagt hat, vielleicht hilft das auch. –

+0

Ah, nur Firebug verwendet und es scheint, dass CakePHP einen Fehler zurücksendet, der "Warnung: DbAcl :: check() - Fehlgeschlagen ARO/ACO-Knoten-Lookup in Berechtigungen zu überprüfen. Knotenreferenzen" und dann zeigt es das Benutzer-Array mit dem eingeloggten Benutzerdatensatz aus der Benutzertabelle. Also ich denke, es war ein ACL-Problem, ich habe jetzt add_activity() zu den allow() - Berechtigungen hinzugefügt und so jetzt bekomme ich Erfolg zurück von der jQuery! Aber ... Alarm (Daten) gibt mir nur "[Objekt Objekt]" ist dies, weil die Antwort nicht json ist? Ich bin sehr neu in JSON und habe es nur probiert, weil es in einem Tutorial war ... –

3

ich die Ajax-Helfer in CakePHP hassen ... das heißt, bis ich das gefunden: http://blog.loadsys.com/2009/05/01/cakephp-jquery-ajax-helper-easy-scriptaculous-replacement/

Jetzt kann ich native CakePHP Ajax Anrufe mit jQuery verwenden! Schau dir das an. Ich war in der Lage, alle meine "einfachen" Ajax Probleme mit diesem Darg-N-Drop Ajax Helper Ersatz zu lösen. Ich gebe das einfach in das Helferverzeichnis in meiner App und ersetze die Ajax.php, die da ist und die Viola! jQuery funktioniert. Sie müssen das jQuery-Skript natürlich in das Layout einfügen. Probieren Sie es aus, Sie werden CakePHP wieder lieben!

2

Ich würde Ihnen empfehlen, CakePHP JSON-Layout zu verwenden, um die Daten aus Sicht anstelle von Echo JSON-Daten von Ihrem Controller auszugeben.

Verwandte Themen