2010-11-08 5 views
2


J'ai un champ de saisie que je voudrais valider dynamiquement pendant que l'utilisateur tape ... J'utilise Codeigniter et je crois que j'ai un problème d'URI ... Permettez-moi de vous montrer le code ...jQuery validation avec le problème Codeigniter

HTML/PHP:
<input type="text" id="username"> <span id="validateUsername"></span>

jQuery:

$(document).ready(function() { 
    var validateUsername = $('#validateUsername'); 
     $('#username').keyup(function() { 
     var t = this; 

     if (this.value != this.lastValue) { 
      if (this.timer) clearTimeout(this.timer); 
      validateUsername.removeClass('error').html('<img src="<?php echo site_url("public/images"); ?>/ajax-loader.gif" height="16" width="16" /> checking availability...'); 
      this.timer = setTimeout(function() { 
       $.ajax({ 
        url: '<?php echo base_url(); ?>register/check_user/' + t.value, 
        dataType: 'json', 
        type: 'POST', 
        success: function (j) { 
         validateUsername.html(j.msg); 
        } 
       }); 
      }, 200); 

      this.lastValue = this.value; 
     } 
    }); 
}); 

Mon contrôleur CodeIgniter a une functio très simple n:

function check_user($username) { 
    // var_dumping stuff goes here 
} 

Dans là, je suis juste essayer de var_dump différentes choses (comme _SERVER $ _REQUEST, $ username), mais je pense que mon script ne parvient même pas que le contrôleur ...

J'essayais de changer la ligne url: '<?php echo base_url(); ?>register/check_user/' + t.value, dans mon script jQuery mais il semble qu'aucune combinaison ne fonctionne. Par exemple:
url: '<?php echo site_url('register/check_user/'); ?>' + t.value,
url: 'index.php/register/check_user/' + t.value,
url: 'register/check_user/' + t.value,

... tout ce que je tente ma durée validateUsername montre que le message "vérifier la disponibilité". J'ai essayé mon script dans Chrome, Safari et IE8. La version de PHP est 5.3.0 et jQuery est 1.4.2 ...

Des idées ce qui pourrait être mauvais ici?

Merci pour toute aide à l'avance!

Répondre

4

Je vois qu'il pourrait y avoir plusieurs problèmes avec votre code:

sont les routes correctement réglés?

Dans votre CodeIgniter routes, procédez comme suit:

$route['register/check_user/(:any)'] =" register/check_user/$1"; 

Dans votre contrôleur CodeIgniter, accédez à la variable en utilisant ceci:

function check_user() { 
    $username = $this->uri->segment(3); 
    var_dump($username); 
    // var_dumping stuff goes here 
} 

Aussi, je suggère d'utiliser jQuery Text Change event, il a beaucoup travaillé pour moi, au lieu d'utiliser setTimeouts et keyup.

Exemple:

$('#username').bind('textchange', function() { 
    $.post('<?php echo base_url(); ?>register/check_user/' + this.value, function(data) { 
     $('#validateUsername').html(data); 
    }); 
}); 
+0

Salut et merci pour l'aide! Oui, j'ai oublié le routage, mais quand je l'ai configuré, ça ne fonctionnait toujours pas: -/J'ai vérifié jQuery Text Change et j'utilise ce plugin maintenant ... Très élégant et facile :) Merci pour le lien :) – errata

+0

Pas de problème, content que je puisse aider :) – tpae

+1

+1, mais il vaut la peine de mentionner 'function check_user() {$ username = $ this-> uri-> segment (3);' peut aussi être remplacé par simplement 'function check_user ($ username) '. cela a l'avantage de fonctionner encore si vous changez la structure à un certain moment, par exemple 'module/controller/method/$ 1' (la structure de l'uri change, ce qui signifie que 3 serait invalide). – Ross