2010-11-18 7 views
0

Ich benutze CakePHP und pippoacl Plugin und ich kann einfach nicht eine neue Rolle hinzufügen. Was ich im Plugin ändern ist, die einreichen mit Ajax, so etwas in meiner Sicht (add.ctp) zu machen:

<?php echo $ajax->submit(
     'submit', 
     array(
      'url' => array('controller' => 'roles', 'action' => 'add'), 
      'before' => 'beforeSubmitAdd();', 
      'complete' => 'completeSubmitAdd(request);' 
     ) 
    ); 
?> 

Wenn die add.ctp zum ersten Mal geladen wird, kann ich print_r etwas aus Der Controller. Aber der oben beschriebene Ajax führt nur das Javascript auf 'before' und 'complete' aus. Ich überprüfe den Firebug, die Antwort ist leer.

Auf meinem Controller:

function add() {   
    print_r("start"); 
    if (!empty($this->data)) { 
     print_r("add new role");   

     // save new role 
    }  
} 

Ich benutze Ajax für Benutzer einreichen, und ich habe kein Problem neue Benutzer hinzufügen. Gibt es eine Idee, wo ich nachsehen sollte? Ich habe den Benutzer- und Rollencode für eine Woche verglichen und einen Freund gebeten, auch meinen Code zu sehen, aber wir können immer noch nicht herausfinden, was das verursacht.

Vielen Dank im Voraus! : D

Antwort

0

Ich bin nicht so vertraut mit dem Ajax Helfer, aber ich benutze es nicht von so lange, dass ich mich nicht erinnern kann, was es tut :).

Zurück zum Problem. Haben Sie überprüft, ob die angeforderte URL in der Ajax-Adresse korrekt ist? Dies sollte einfach funktionieren, aber es ist möglich, dass die URL ungültig ist.

Verwenden Sie die Sicherheitskomponente (selbst wenn Sie sie nur für die Variable var $ components hinzufügen) ?. Dies könnte zu einem leeren Bildschirm führen, insbesondere wenn Sie die Felder im Formular irgendwie ändern. Versuchen Sie, es zu entfernen und zu sehen, ob es ohne arbeitet.

Endlich würde ich sagen, wie ich es mit jQuery machen würde.

folgenden Code sollte die Arbeit machen:

$(document).ready(function(){ 
    $('form').live('submit', function(){ //handles also dynamically loaded forms 
     var form = $(this).addClass('loading'); //indicate somehow that the form has been submitted 
     $('#content').load($(this).attr('action'), $(this).serialize(), function(){ 
      form.removeClass('loading'); 
     }); 
    }) 
}); 

Dies wird alle wirft in den Formen des Systems handhaben, aber Sie können natürlich ändern.

+0

Hallo, Nik! Die URL ist bereits korrekt. Es sollte zur Add-Aktion im Rollen-Controller gehen und nach dem Speichern der neuen Rolle sollte es eine andere Seite laden. Was passiert, ist, dass es auf eine andere Seite geht, ohne etwas zu speichern. Ich habe versucht, print_r und stellte fest, dass es das Add nicht ausgeführt hat. Danke für Ihre Antwort! – Threl