11548 sujets

JavaScript, DOM et API Web HTML5

Bien le bonjour à vous tous!
Je suis nouveau sur ce forum Smiley lol
Je développe un site, et voilà que je me retrouve avec une erreur étrange, je vous montre le code et les explications ensuite (j'utilise la librairie prototype, et j'utilise Ajax.Request pour faire une requete en arrière plan) :

var save = "";

// s'il y a chevauchement ou autre demande confirmation sinon valide
var handlerFunc = function(t) {
    if("valid" == t.responseText){
        save = true;
    }else{
        save = confirm("Attention il y a un chevauchement entre les films, ou le film est déja programmé dans une autre salle ! Souhaitez vous tout de meme poursuivre ?");
        alert(save);   //////////////////////////////////////////////////////////alert n°1
    }
}
function verifFormSeance(){
    var verif = true;
    //... blablabla verification tout ca...
    if(verif){
        var para = "action=verifSeance&heure=" +$F('heure')+ "&minute=" +$F('minute')+ "&idFilm=" +$F('id_films');
        new Ajax.Request('../ajax/index.php', {
            method:'get',
            parameters:para,
            onComplete:handlerFunc,
            onFailure:errFunc
        });
        alert(save);   //////////////////////////////////////////////////////////alert n°2
        return save;
    }else{
        return false;
    }
}


Là ou j'ai mis " //////////////////////////////////////////////////////////" c'est pour vous indiquer l'ordre d'apparition des alert()
Le problème c'est qu'il affiche d'abord le alert n°2, à ce moment malheureusement la valeur de save est encore égale à "", du coup le return renvoie pas false et mon formulaire est envoyé... le alert n°1 n'est envoyé qu'aprés...

Je ne comprend donc pas pourquoi il fait le alert n°2 avant le alert n°1, dans l'ordre des appels il devrait le faire dans l'ordre des numéros nan?! Smiley confus
La fonction verifFormSeance() est appelée depuis un formulaire sur un onsubmit.

Ce que je veux que ça fasse c'est qu'avant de valider le formulaire une vérification soit faite (non pas sûr les champs, même si du coup je suis obligé de vérifier qu'ils sont corrects, je vous ai épargné ce code puisqu'il fonctionne (je fais aussi la vérification du côté php)).
Voilà je suis bien coincé du coup... Merci à vous pour vous pencher sur mon problème... Smiley smile
CEci est tout ç fait normal, puisque tu fais une requete asynchrone.
Cela signifie que lorsque l'appel ajax est lancé, ta fonction continue sa route, et donc save est toujours vide à ce moment là. Quand la requête ajax est finie, alors "save" est remplie.

La solution simple, serait que tu fasses une requête synchrone. C'est la meilleure solution, et puis c'est qu'une simple petite validation de formulaire "Ajax".

Donc lorsque tu fais ton appel ajax tu rajoute asynchronous:false :

new Ajax.Request('../ajax/index.php', {
            method:'get',
            parameters:para,
            onComplete:handlerFunc,
            onFailure:errFunc,
            asynchronous:false
        });


et si j'etais toi, je ferai plutôt une requete en POST qu'en GET c'est beaucoup plus sexy (surtout quand c'est du traitement de formulaire)
Modifié par Gatsu35 (09 Jul 2007 - 01:24)
Smiley eek
Ho merci Smiley smile
C'était bien ça le problème, j'ai été trop bête sur ce coup...

Oui oui, pour le POST c'était prévu que ce soit comme ça !
Merci beaucoup Smiley cligne