AJAX et window.prompt qui ne fonctionne pas

Résolu
mikool19 - 15 janv. 2013 à 23:09
 mikool19 - 21 janv. 2013 à 20:29
Bonjour à tous,
je suis nouveau ici et je ne suis peut-être pas au bon endroit, veuillez me pardonner si c'est le cas.

J'ai fait une fonction javascript (dans un code PHP) qui utilise ajax pour renommer un flux existant (traitement spécifique en PHP). Cette fonction commence par un prompt pour récupérer le nouveau nom du flux puis utilise ajax pour envoyer cette information en méthode POST à un script PHP sur le serveur web qui va renommer le flux en conséquence. Enfin, elle réaffiche le flux avec le nouveau nom. Tout ça est assez classique en fait.

Le problème est que ça ne fonctionne pas, c'est à dire que le script ne passe pas la partie avec ObjReq01.readyState =4 et ObjReq01.status == 200, sauf si j'ajoute une ligne window.alerte juste avant et je ne comprends pas pourquoi, je suis dérouté. J'ai le même comportement avec Firefox 18, Safari et Chrome dernières versions. Le script présenté ci-dessous fonctionne tel quel mais ça ne fonctionne plus si on enlève la ligne avec
window.alert("Mystère...") ;


N'hésitez pas à me demander des précisions si ce n'est pas clair.

Si quelqu'un a une idée ou mieux une explication ou encore mieux la solution, ce serait super.

Merci d'avance.

function renommeFlux(flux) {
var nameFlux=prompt("Renommage du flux " + flux + " : saisir le nouveau nom du flux.\n\nConvention de nom : 3 à 16 caractères alphanumériques.\n\nValider avec la touche ENTER du clavier.\n\n", "") ;
var regexPath = new RegExp("^[a-zA-Z0-9]{3,16}$","") ;
if (regexPath.test(nameFlux) && nameFlux != null) {
var ObjReq01 = null ;
if(window.XMLHttpRequest) {
ObjReq01 = new XMLHttpRequest() ;
} else if (window.ActiveXObject) {
ObjReq01 = new ActiveXObject("Microsoft.XMLHTTP") ;
} else {
alert ("Votre navigateur ne supporte pas les objets XMLHTTPRequest") ;
return ;
}
var URL="php_flux.php" ;
ObjReq01.open("POST",URL, true) ;
var var26 = "flux=" + flux + "&nameFlux=" + nameFlux + "&Action=renommeFlux" ;
ObjReq01.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") ;
ObjReq01.setRequestHeader("Content-length", var26.length) ;
ObjReq01.setRequestHeader("Connection", "close") ;
ObjReq01.onreadystatechange = function() {
window.alert("Mystère...") ;
if (ObjReq01.readyState == 4) {
if (ObjReq01.status == 200) {
if (ObjReq01.getResponseHeader("Content-Type") == "text/xml") {
var reponse = ObjReq01.responseXML ;
} else {
var reponse = ObjReq01.responseText ;
}
alert("Le flux " + flux + " a bien été renommé en " + nameFlux) ;
window.location=\'./aff_flux.php\' ;
}
}
}
ObjReq01.send(var26) ;
} else {
if (nameFlux != null) {
alert("Le nouveau nom du flux ne respecte pas la convention de nom.\n\nLe renommage du flux " + flux + " est annulé.") ;
}
}
}

3 réponses

sylvain64520 Messages postés 130 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 7 juin 2013
16 janv. 2013 à 09:23
Sinon tu peux utiliser JQuery pour AJAX, c'est plus simple que tout ce que tu as écris.

Ensuite, j'ai troujours vu écris :
if (ObjReq01.readyState 4 && ObjReq01.status 200) { ... }

pour l'attente de connexion. Si ObjReq01.status 200 passe avant ObjReq01.readyState 4, en séparant les condition, tu ne rentres jamais dans la condition.

Autre piste de solution : ici
3
Merci sylvain64520, j'ai testé ce qui est expliqué dans le lien indiqué mais ça ne fonctionne pas. Je ne connais pas JQuery mais c'est surement l'occasion de m'y mettre. Si je ne trouve pas de solution, je peux toujours faire un formulaire classique. Encore merci.
0
J'ai trouvé, c'était tout bête.
Ca ne venait pas du code javascript mais du code PHP (que je n'avais pas reporté).

J'avais écrit :


alors qu'il fallait écrire :



La différence est TYPE="BUTTON" au lieu de TYPE="SUBMIT".
Une erreur de débutant...

Merci et @+
0
Rejoignez-nous