Ciao,
Fatto questo alla pagina funzioni .asp c'è una funzione specifica che verifica l'esistenza del nome nel db, come faccio a richiamare solo quella??
Non inviare la richiesta ajax a funzioni.asp. Predisponi invece un'altra pagina asp che:
- Include funzioni.asp
- Legge il nome con Request.Form("nome")
- Invoca una funzione definita in funzioni.asp
- Restituisce un risultato per indicare al client se il nome esisteva oppure no.
Ecco un esempio di tale pagina. Supponiamo che si chiami verificaNome.asp
<!--#include file="funzioni/funzioni.asp"-->
Dim nome
nome = Request.Form("nome")
Dim esiste
'Qui chiamo la funzione definita in funzioni.asp
esiste = verificaSeNomeEsiste(nome)
'Restituisco un risultato per il client
If esiste Then
Response.Write "1"
Else
Response.Write "0"
End If
dal tasto submit del form viene richiamata una funzione js tramite onclick="return controllo()"
Non va bene, perché il
return controllo() funzionerà solo se fai verifiche sincrone. Qui invece sono coinvolte anche delle verifiche asincrone dato che stai inviando richieste ajax.
Come ti dicevo nel post precedente non è il caso di invocare la funzione
validanome come parte della condizione dell'if. Lei produrrà un risultato in maniera asincrona, perciò non valutabile in maniera sincrona nell'if.
else if(accedi.nome.value.length < 3 || validanome(accedi.nome.value)){
Quindi il bottone non dovrà essere un submit ma dovrà avere l'attributo
type="button". E all'onclick esegui la funzione
controllo(). Ad esempio:
<input type="button" onclick="controllo(this.form)" value="Invia il form" />
Dalla funzione controllo dovrai invocare il submit del form solo se tutte le verifiche sono state fatte con successo. Esempio (scrivo a braccio, non è detto che sia corretto).
function controllo(form) {
if(accedi.nome.value == ""){
document.getElementById('nome').setAttribute("class","error");
document.getElementById('errore').style.display = "block";
document.getElementById('errore').innerHTML = "Devi inserire un nome.";
accedi.nome.focus();
return; //Ora basta fare return
}
else if(accedi.nome.value.length < 3){
document.getElementById('nome').setAttribute("class","error");
document.getElementById('errore').style.display = "block";
document.getElementById('errore').innerHTML = "Devi inserire un nome valido.";
accedi.nome.focus();
return;
}
else{
document.getElementById('nome').removeAttribute("class");
document.getElementById('errore').style.display = "hidden";
}
//Se tutti i controlli sincroni sono andati a buon fine, allora eseguo la richiesta ajax di validazione.
validanome(form, accedi.nome.value);
}
La funzione validanome dovrà essere modificata in questo modo per invocare il submit del form se e quando la pagina asp ci dice che il nome non esiste. Ancora una volta, scrivo a braccio quindi ci saranno degli errori. Cerca di cogliere l'intento di quello che sto facendo qui.
function validanome (form, nome) {
$.ajax({
type: "POST",
url: "/verificaNome.asp",
data: {
nome: nome
}
},
success: function(risultato) { //questa callback viene eseguita quando la richiesta ajax è completa
if (risultato != "0") { //Risultato è il testo restituito dalla pagina asp
//Stampo l'errore
document.getElementById('nome').setAttribute("class","error");
document.getElementById('errore').style.display = "block";
document.getElementById('errore').innerHTML = "Il nome esisteva";
} else {
//il nome non esisteva, quindi posso inviare il form
form.submit();
}
});
}
Ciao,
Moreno
P.S. Ricordati di fare gli stessi controlli anche lato server prima di creare l'utente. Infatti, la validazione JavaScript è facilmente bypassabile dagli smanettoni.
Modificato da BrightSoul il 26 aprile 2019 13:41 -