Cakephp & ajax (Exemple simple & rapide)

Par flinstone, il y a 13 ans


Vue : admin_add.ctp

<div class="page-header">
    <h1>Ajouter un membre</h1>
</div>
<?php 
    echo $this->Form->create('User', array('type' => 'file'));
    echo $this->Form->input('picture', array('label' => 'Photo', 'type' => 'file'));
    echo $this->Form->input('username', array('label' => 'Le login:',
                    'style' => 'height: 25px;'));
    echo $this->Form->input('name',array('label' => 'Nom:',
                    'style' => 'height: 25px;'));
    echo $this->Form->input('password',array('label' => 'Mot de passe: ',
                    'style' => 'height: 25px;'));
    echo $this->Form->input('passwordconfirm',array('label' => 'Confirmer le mot de passe: ', 'type' => 'password',
                    'style' => 'height: 25px;'));
    echo $this->Form->input('role', array('value' => 'membre', 'type' => 'hidden'));
    echo $this->Form->input('level_id', array('label' => 'Le niveau scolaire: ',
                    'style' => 'height: 25px;',
                    'class' => 'ajaxListe',
                    'data-url' => $this->Html->url( array( 'controller' => 'users', 'action' => 'getgroupes', 'admin' => true ), true )

                    ));
    echo $this->Form->input('groupe', array('options' => array(), 
                    'style' => 'height: 25px; width: 50px;'));
    echo $this->Form->input('actif', array('label' => 'Compte actif'));

    echo '<br />';
    echo $this->Form->end(array('label' => 'Ajouter l\'utilisateur', 'class' => 'btn btn-primary'));
?>

Controller: UsersController

public function admin_getgroupes() {
        if ( $this->request->is( 'ajax' ) ) {
            $this->loadModel('Level');
            $result = $this->Level->find( 'first', array( 
                'conditions' => array( 'id' => $_GET'id'] ) ,
                'fields' => array( 'nbre_groupes' ) 
                ));
            $ret'res'] = $result'Level']'nbre_groupes'];
            echo json_encode( $ret );
            exit();
        }
    }

Ajax (jQuery):

$(".ajaxListe").live("click", (function(e){
        var select = $(this);
        $.get( 
            select.data('url'),
            { id: $( '#UserLevelId' ).val() }, 
                function( data ) {
                    var obj = jQuery.parseJSON( data );
                    $( '#UserGroupe' ).find('option').remove();
                    for(var i=0; i < obj.res; i++){
                        $( '#UserGroupe' ).append(new Option(i+1, i+1, false, false));
                    }
                }
            );
        return false;
    }));

6 réponses

flinstone, il y a 13 ans

@GeeSa

'data-url' => $this->Html->url( array( 'controller' => 'users',
 'action' => 'getgroupes', 'admin' => true ), true )

est la clé dont j'ai beau et bien cherché.
j'espère être utile et que j'ai pas brisée une règle d'utilisation de ce Forum.
Salut.

GeeSa, il y a 13 ans

Bonjour, je n'arrive pas a récupérer ma valeur envoyer par la méthode Post ou Get.
Je fais un debug de $_POST, et il est vide, alors que ma requete Ajax est bien envoyer.

Pourrais tu m'aider.

flinstone, il y a 13 ans

Sûrement tu as une erreur quelque part dans ta vue (page).
si tu peux la poster ça sera mieux.

GeeSa, il y a 13 ans

Ma vue:

mon fichier js:

Ma fonction dans le controller :

C'est pour faire 3 listes déroulante liées.
J'appel RequestHandler dans mon AppController.
Aimerais tu voir les écrans de l'outils de développement de google chrome ?
Merci de ton aide ça fais un sacré moment que je suis sur le problème. ^^

flinstone, il y a 13 ans

Sincèrement j'ai pas su trouvé l'anomalie dsl !!
sinon je pense pas bien comprendre ton problème hèhè.

GeeSa, il y a 13 ans

oh non me dis pas ca... XD je cherche depuis 2 semaines... si tu veux je t'envoi mon dossier. Faut vraiment que je trouve!