AJAX et window.prompt qui ne fonctionne pas [Résolu]

mikool19 - 15 janv. 2013 à 23:09 - Dernière réponse :  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é.") ;
}
}
}
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
sylvain64520 130 Messages postés lundi 11 janvier 2010Date d'inscription 7 juin 2013 Dernière intervention - 16 janv. 2013 à 09:23
3
Merci
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

Merci sylvain64520 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de sylvain64520
0
Merci
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.
Commenter la réponse de mikool19
0
Merci
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 @+
Commenter la réponse de mikool19

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.