J'essaye de renvoyer vrai pour la fonction validator.registercallback entière si le script ajax suivant ne renvoie pas 1. Cependant, il ne fonctionne pas, et je pense que c'est probablement quelque chose de basique que je suis manquant, mais je ne peux pas le comprendre.Ajax ne me laisse pas retourner vrai ou faux
validator.registerCallback('unique_username', function(value) {
//use ajax to run the check
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if(xmlhttp.responseText != 1) {
alert('Username Exists');
return false;
} else {
alert('Username Available!');
return true;
}
}
}
xmlhttp.open("GET","uniqueuser.php?username="+value,true);
xmlhttp.send();
})
Ce qui est bizarre est que les œuvres suivantes, il ne fonctionne tout simplement en fonction de la valeur de ne pas le script ajax:
validator.registerCallback('unique_username', function(value) {
//use ajax to run the check
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if(xmlhttp.responseText != 1) {
alert('Username Exists');
return false;
} else {
alert('Username Available!');
return true;
}
}
}
xmlhttp.open("GET","uniqueuser.php?username="+value,true);
xmlhttp.send();
return true;
})
Donc, fondamentalement, je peux le dire de revenir vrai dans la principale fonction, mais quand j'essaie de le rendre vrai seulement si la valeur dans le script ajax ne retourne pas 1, cela ne fonctionne pas. En passant, les alertes fonctionnent. Donc, il obtient la bonne valeur, mais il ne reviendra pas vrai, ou faux d'ailleurs.
Toute aide est appréciée!
Mise à jour
validator.registerCallback('unique_username', function(value) {
//use ajax to run the check
function ajax_result() {
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
}
}
xmlhttp.open("GET","uniqueuser.php?username="+value,true);
xmlhttp.send();
}
if(ajax_result() != 1) {
alert('Username Exists');
return false;
} else {
alert('Username Available!');
return true;
}
})
Chercher « ajax valeur de retour » le * bit asynchrone * est particulièrement important .. aussi, pensez à utiliser une bibliothèque pour AJAX (et non, je ne se soucient pas que l'on , mais puisque * vous l'avez marqué comme jQuery * ..) –
http://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success - jQuery, mais devrait montrer le point (et comment pour écrire du code plus propre) et si vous voulez * synchrone * comportement (ick!) voir http://stackoverflow.com/questions/2942544/synchronous-calls-with-jquery –
J'ai essayé d'utiliser la version de jquery mais cela n'a pas fonctionné non plus – user1751581