11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
je suis complètement perdu dans mon code.
J'ai un lien <a href="monlien.html' id="monid">mon lien</a>
Lorsque je clique sur le lien je fais un appel ajax qui traite des données en php.
Je veux ensuite afficher une alerte sur ma page si l'ajax s'est bien passé (à l'exécution de la méthode success).
Cela fonctionne sur IE et Chrome, mais pas sur FF. En effet, FF n'affiche pas l'alerte et passe directement sur la page monlien.html (l'ajax fonctionne bien pourtant).
Ce que je voudrai donc c'est:
1°) je clique sur le lien
2°) le traitement se fait en php via ajax
3°) si traitement ok, j'affiche une alerte sur ma page
4°) ensuite, le lien s'exécute.
voilà mon code,
 
$('#idtraitement a').click(function(){
      $('#tabmessage').hide();
      var numtraitement=$(this).attr('id');
      var etat=$(this).attr('name');
      if(etat==0){
          //appel ajax de vérification de l'état
         $.ajax
          (
              "http://www.monsite.com/ajax/verifEta.php"
              ,{
                  type: 'POST',
                  data : {
                      numtraitement:numtraitement
                      ,etat:3
                  }
                  ,dataType : "json"
                  ,success:function(data){
                      alert(data.messalert);
                  }
                  ,error : function( xhr, message, errorThrown )
                  {
                      console.log( xhr.status );
                      console.log( errorThrown );
                  }
              }
          );
      }

merci de votre aide...
tu cherche à faire du procédurale, ajax c'est tous sauf du procédural.

car tu souhaite attendre une "réponse" en ajax, alors qu'en vrai ton navigateur n'attend pas de réponse. c'est asynchrone.

tu peux palier à ça, mais bon... c'est comme mettre une assiette sur la table, se servir à coté et manger. tu te sert de quelque chose pour faire complètement autre chose. Pourquoi faire de l'ajax alors ???

pour tricher tu fais un
async: false


EDIT :
ou alors j'ai pas compris la demande.
Modifié par JENCAL (01 Feb 2016 - 16:47)
Salut,

J'ai pas bien compris mais si je suis :
bhisz a écrit :
1°) je clique sur le lien
2°) le traitement se fait en php via ajax
3°) si traitement ok, j'affiche une alerte sur ma page
4°) ensuite, le lien s'exécute.
Si je comprend bien ce que tu veux dire alors ce qu'il manque à ton code c'est un return false ou e.preventDefault() pour annuler le comportement de base du lien. Et ensuite reprendre la main dans ton success().
Administrateur
Tout à fait, autrement dit au début du code

$('#idtraitement a').click(function(e){
  e.preventDefault();
J'ai bien essayé le e.preventDefault() à cet endroit. Mais dans ce cas, une fois le traitement ajax fait, comment rendre le lien actif au sein de la fonction success d'ajax ? le return true ne donne rien, le reload fonctionne mais oblige l'internaute à accepter manuellement le rechargement de page...

Pour Gili :
tu as raison, c'est bien cela que je veux : ce qu'il manque à ton code c'est un return false ou e.preventDefault() pour annuler le comportement de base du lien. Et ensuite reprendre la main dans ton success().

Ma question, c'est comment "reprendre la main" dans success ? je n'ai rien trouvé sur le net et aucune solution n'a fonctionné (return true, reload, click())... Smiley biggrin
Tu dois pouvoir changer de page avec window.location non ?

Ça doit donner un truc comme ça après ton alert :
window.location.assign($(this).attr('href'));
Merci, grâce à vous, j'ai réussi à afficher mes alertes sous FF, chrome et IE et en même temps faire un renvoi en passant l'url comme paramètre de mon data ajax. Je n'ai pas utilisé l'instruction $(this).attr('href') directement dans la fonction success car la valeur n'est pas reconnue.

Voilà ma fonction success qui fonctionne (en dehors du bug ci-dessous) :
$('#liensuppr a').click(function(event){
    event.preventDefault();
[...]
,success:function(data){
                 alert('la suppression de la demande pread-'+numtraitement+' a bien été effectuée');
                //console.log(data);
                 window.location.assign(data.url);
              }


Par contre, mon debugger JS sous chrome bloque en m'affichant cette erreur (CF image jointe). Avez vous une idée d'où vient ce souci ? Je ne trouve que des bouts de réponses en anglais sur mon ami google...
upload/20576-erreurJQ1.png