2011-01-14 22 views
7

Utilizzo il plug-in di validazione jquery.Validazione Ajax con jquery?

Nella mia forma ho bisogno di controllare se il nickname è già in uso o meno.

Per questo stanno fornendo la chiave remote per effettuare una chiamata ajax. Per me la chiamata ajax funziona correttamente e restituisce true o false. Ma il suo permesso anche se il valore restituito è falso, che non dovrebbe accadere.

Il mio codice di convalida sembra,

$(function() { 
    $("#myform").validate({ 
     rules: { 
      fullName: { 
       required: true, 
       minlength: 5 
      }, 
      nickName: { 
       required: true, 
       minlength: 4, 
       alphaNumeric: true, 
       remote: { 
        url: "NickNameChecker", 
        type: "post", 
        data: { 
         nickName: function() { 
         return $("#nickName").val(); 
        }}, 
        success: function(data) { 
         return data; 
        } 
       } 
      } 
     }, 
     messages: { 
      fullName: { 
       required: "Please Enter Your Full Name.", 
       minlength: "Full Name should have minimum 5 letters." 
      }, 
      nickName: { 
       required: true, 
       minlength: "Nick Name should contain minimum 4 letters.", 
       remote: "This nickname is already in use." 
      } 
     } 
    }); 
}); 

Qualsiasi suggerimento sarebbe riconoscente !!!

Grazie!

Soluzione:

La soluzione è solo il mio codice.

Ho appena rimosso la parte di successo e ho provato. Funziona alla grande!

+1

Qual è il valore restituito dalla pagina remota? – Chandu

+0

@Cybernate: se nick non è in uso 'true' altrimenti' false' –

+3

@TamilVendhan: non è un esperto dell'opzione 'remote', ma nessuno degli esempi che ho trovato ha mostrato che l'opzione' success' è stata specificata. –

risposta

1

(spiegazione Expanded dal commento di cui sopra):

L'opzione success non è valida per la convalida a distanza di jQuery validate. Si dovrebbe essere in grado di specificare solo un URL per accedere per la convalida che restituisce true o un messaggio di valore di errore/falsy:

La risorsa lato server si chiama via $ .ajax (XMLHttpRequest) e ottiene un chiave/valore coppia, corrispondente al nome dell'elemento convalidato e al suo valore come parametro GET. La risposta viene valutata come JSON e deve essere vera per gli elementi validi e può essere qualsiasi falsa, indefinita o nulla per gli elementi non validi, utilizzando il messaggio predefinito; o una stringa

Vedere la documentation for remote per ulteriori informazioni su come utilizzare l'opzione. Il tuo codice sarebbe probabilmente simile a questa:

$(function() { 
    $("#myform").validate({ 
     rules: { 
      fullName: { 
       required: true, 
       minlength: 5 
      }, 
      nickName: { 
       required: true, 
       minlength: 4, 
       alphaNumeric: true, 
       remote: { 
        url: "NickNameChecker", 
        type: "post", 
        data: { 
         nickName: function() { 
         return $("#nickName").val(); 
        } 
       } 
      } 
     }, 
     messages: { 
      fullName: { 
       required: "Please Enter Your Full Name.", 
       minlength: "Full Name should have minimum 5 letters." 
      }, 
      nickName: { 
       required: true, 
       minlength: "Nick Name should contain minimum 4 letters.", 
       remote: "This nickname is already in use." 
      } 
     } 
    }); 
}); 
0

Il team di jQuery convalida ha consigliato un altro modo per gestire le API non booleani in this GitHub issue.

Il metodo proposto sfrutta la proprietà dataFilter di jQuery.ajax().

form.validate({ 
    rules: { 
     username: { 
      required: true, 
      remote: { 
       url: "users2.json.php", 
       dataFilter: function(data) { 
        var json = JSON.parse(data); 
        if(json.status === "success") { 
         return '"true"'; 
        } 
        return "\"" + json.error + "\""; 
       } 
      } 
     } 
    } 
});