2010-12-07 3 views
1

code Javascript:exploitation forestière Asynchronous dans JQuery

$.ajaxSetup({ 
    async: true 
}); 

$("a").live('click', function (event) { 
$.get(logsomething-URL); 
}); 

code ASP.NET sur la page logsomething sur le serveur:

Thread.Sleep(10000); 

Lorsque je clique sur un lien, je dois attendre une réponse de la serveur. Dans ce cas, je dois attendre 10 secondes avant d'être redirigé vers la page que j'ai demandée.

Est-il possible d'empêcher cela?

Répondre

4

D'abord, vous n'avez pas besoin:

$.ajaxSetup({ 
    async: true 
}); 

parce que les requêtes AJAX sont asynchrones par défaut (c'est ce que les A signifie: asynchrone).

Ensuite vous pourriez return false du gestionnaire click pour empêcher l'action par défaut (ce qui est de suivre le href) et dans le gestionnaire AJAX success effectuer la redirection réelle:

$('a').live('click', function (event) { 
    // store the location to redirect to later in the success callback 
    var href = this.href; 
    $.get('logsomething-URL', function(result) { 
     // Now after the AJAX call successfully returned 
     // perform the redirect 
     window.location = href; 
    }); 
    return false; 
}); 
+1

au lieu de retourner faux, vous pouvez aussi tout simplement faire « event.preventDefault(); » comme la première ligne de votre fonction de clic. Voir plus ici: http://api.jquery.com/event.preventDefault/ –

+0

@Betard Fooser, oui, vous pouvez également utiliser la fonction 'preventDefault'. C'est fondamentalement la même chose. –

+0

Si j'avais juste besoin d'un lien, ce serait probablement une bonne solution. Je ne pense pas que ce soit une solution élégante à ce que j'avais en tête. J'en ai besoin pour travailler sur les boutons, les liens et les soumissions. Je ne peux pas être sûr si un clic de lien est réellement une redirection. Ça pourrait être autre chose. La tâche suivante est inconnue. – user484204

0

Quelque chose comme cela devrait le faire - en gros, vous ne voulez pas le lien pour agir comme un lien:

$("a").live('click', function (event) { 
    var linkTarget = $(this).attr('href'); 
    event.preventDefault(); 
    $.get(logsomething-URL, function(){ 
     window.location = linkTarget; 
    }); 
}); 
+0

Si j'avais juste besoin d'un lien, ce serait probablement une bonne solution. Je ne pense pas que ce soit une solution élégante à ce que j'avais en tête. J'en ai besoin pour travailler sur les boutons, les liens et les soumissions. Je ne peux pas être sûr si un clic de lien est réellement une redirection. Ça pourrait être autre chose. La tâche suivante est inconnue. – user484204

0

Je ne voudrais pas utiliser .get $, mais plutôt utiliser .ajax $ - il vous permet de spécifier plus. Si cela ne fonctionne pas, essayez de jeter un oeil à

http://api.jquery.com/jQuery.ajax/

$.ajax({ 
    url: 'logsomething-URL', 
    success: function(data) {  
    alert('Success!'); 
    }, 
    global: false 
}); 
+0

Et oui, event.preventDefault() est utilisé pour arrêter l'événement click de la propagation, mais vous avez mentionné que vous en avez besoin. Si vous pouviez résumer tous les événements sur le bouton/lien à un appel, vous pouvez contrôler l'ordre des 'événements' –

Questions connexes