2011-09-07 17 views
6

Possiedo una convalida del modulo di lavoro, incluso il controllo remoto di un nome utente disponibile. abbiamo aggiunto molti altri javascript al file script.js e ad un certo punto di recente la parte remota di questo è stata interrotta. C'è un solo campo modulo controllato da validate, il campo new_name. È richiesto (funziona) e deve essere disponibile (non funziona).Jquery Validate Remote non funziona. Impossibile inviare il modulo

Ecco il jQuery:

 $('#nickname_form').validate({ 
     rules: { 
      new_name: { 
       required: true, 
       remote: { 
        url: '/api/screenname_unique/', 
        type: 'post' 
       } 
      } 
     }, 
     messages: { 
      new_name: { 
       required: 'Please choose a Forum Username.', 
       remote: 'That Username is already taken or contains invalid characters.' 
      } 
     } 
    }); 

Come ho detto sopra utilizzato per lavorare, senza modifiche. Ho controllato il resto del file script.js e non si sono verificati errori. Inoltre, nel sito, non vediamo errori JS ovunque. Se rimuovo la parte remota del codice precedente, il controllo richiesto funziona e il modulo verrà inviato quando c'è un valore nel campo.

Con il telecomando in posizione, il modulo non viene inviato e se la risposta ajax dalla chiamata remota è vera o falsa, non viene visualizzato alcun messaggio di errore di convalida jQuery. Ecco la pagina chiamata da remoto. Funziona bene per quanto riguarda la risposta che sta dando per un dato valore:?

<?php 
header('Content-type: application/json'); 

//get the post value 
$screen_name = $_POST['new_name']; 

//get their member_id 
$member_id = $this->EE->session->userdata['member_id']; 

//return false if no screen_name provided 
if((!$screen_name) || (!$member_id)) { 
    echo json_encode(false); 
    exit; 
} else { //there is a screen_name 

    //Regex Check for valid chars 
    $valid = !preg_match('/[^a-z0-9_ -]/i',trim($screen_name)); 

    if (!$valid) { 
     echo json_encode(false); 
     exit; 
    } 

    //SQL 
    $results = $this->EE->db->query("SELECT member_id FROM exp_members WHERE screen_name = '$screen_name' and member_id <> '$member_id' limit 1"); 

    if ($results->num_rows() > 0) { 
     echo json_encode(false); 
    } else { 
     echo json_encode(true); 
    } 

} 

>

io non sono realmente sicuro dove andare da qui. Idee?

+1

Hai usato 'console.log' o hai guardato le chiamate ajax per eseguire il debug del problema? – yoda

+0

Ho guardato con Firebug e le chiamate ajax stanno restituendo 200 OK insieme a vero o falso in modo appropriato. La funzione funziona correttamente: il modulo non invia o risponde correttamente a un nome utente non disponibile. –

risposta

2

Stavo usando JQ 1.5.1 e appena aggiornato a 1.6.3 e ora il modulo sta funzionando bene. Suppongo che forse ci sia stato un problema con il telecomando e 1.5.1? Grazie ragazzi.

0

Non hai inviato i dati con l'opzione remota.

Prova questo. Può esserti utile.

$("#nickname_form").validate({ 

rules: { 
Name: "required", 
email: { 
    required: true, 
    email: true 
}, 

username: 
{ 
    required: true, 
    remote: { 
    url: "http://www.xyz.com/checkusername.php", 
    type: "post", 
    data: { 
     username: function() { 
     return $("#username").val(); 
     } 
    } 
    } 
} 
}, 

messages: { 

Name: "Please enter name.", 
email: { 
    required: "Email address require.", 
    email: "Please enter valid email address." 
}, 

username: 
{ 
    required: " Please enter username.", 
    remote: " Username is already exists please choose other." 
} 
    }, 

errorPlacement: function(error, element) { 
       error.appendTo(element.next()); 
      }, 

submitHandler: function() { 
     sendmail(); 
     }, 
success: function(label) { 
     label.html("&nbsp;").addClass("valid_small");     
     } 

}); 

E sul lato server non utilizzare json in opzione remota. Stampa vero o falso.

+0

Grazie. Non ho mai dovuto aggiungere il parametro dati a questa chiamata remota. Il test della pagina richiamata da remoto mostra che sta ottenendo il valore del campo #new_name. Ho aggiunto il parametro data solo per provarlo ma non ha cambiato nulla. Anche cambiato l'output in echo "true"/echo "false" (che è come l'ho avuto in origine fino a ieri) e che non ha cambiato nulla. –

Problemi correlati