Lien de redirection des balises d’ancrage HTML après la requête ajax

J’essaie d’écrire une méthode pour intercepter les clics de l’utilisateur sur un menu de site, mais je veux que le processus soit silencieux pour l’utilisateur, principalement que lorsqu’un utilisateur survole une balise d’ancrage, il se comporte normalement contient). J’ai essayé de le faire de différentes manières, et je l’ai presque fait fonctionner maintenant, mon code est le suivant:

 

Et dans jQuery, j’ai:

 $(".selectAnchor, .menuAnchor").click(function(event){ event.stopPropagation(); console.log(event.target.nodeName); //event.preventDefault(); $.ajax({ type: 'POST', url: 'http://localsite/menuRedirect.php', data: {id:0, module:'Module',source:'Source'}, complete: function(data){ console.log("DONE"); return true; } }); }); 

Le lien redirige vers la page sélectionnée, mais le code ajax ne se termine jamais et n’enregistre donc jamais le clic de l’utilisateur.

J’ai essayé d’utiliser event.preventDefault, mais il n’y a aucun moyen de reprendre l’événement annulé.

Une partie du problème provient de fonctionnalités supplémentaires, disons que la plupart des utilisateurs cliquent avec le bouton droit de la souris sur la balise d’ancrage pour s’ouvrir dans un nouvel onglet (ou utilisez les touches Ctrl + clic ou moyen).

 Google 

n’est pas autorisé sur le site (pour des raisons de sécurité).

Des suggestions comment cela peut-il être fait?

Utilisez event.preventDefault puis, en cas de succès, utilisez location.href = self.href

 $(".selectAnchor, .menuAnchor").click(function(event){ event.preventDefault(); console.log(event.target.nodeName); var self = this; $.ajax({ type: 'POST', url: 'http://localsite/menuRedirect.php', data: {id:0, module:'Module',source:'Source'}, complete: function(data){ console.log("DONE"); location.href = self.href; } }); }); 

Ou utilisez la propriété context pour supprimer var self = this

 $(".selectAnchor, .menuAnchor").click(function(event){ event.preventDefault(); console.log(event.target.nodeName); $.ajax({ type: 'POST', context: this, url: 'http://localsite/menuRedirect.php', data: {id:0, module:'Module',source:'Source'}, complete: function(data){ console.log("DONE"); location.href = this.href; } }); }); 

Essaye ça

  

Alors ceci dans jQuery:

 $(".selectAnchor, .menuAnchor").click(function(event){ event.preventDefault(); console.log(event.target.nodeName); //event.preventDefault(); $.ajax({ type: 'POST', url: 'http://localsite/menuRedirect.php', data: {id:0, module:'Module',source:'Source'}, complete: function(data){ console.log("DONE"); window.location = "http://www.google.com" } }); });