2011-03-10 4 views
1

Je souhaite connaître la durée d'une requête ajax en utilisant jquery. Par exemple, je suis en utilisant ce script:Obtenir la durée de la requête AJAX

$.ajax({ 
    type: "GET", 
    url: "http://localhost/thescript.php", 
    success: function(data){ 
    $("#container").html(data); 
    }, 
    complete: function(jqXHR, textStatus){ 
    alert("http://localhost/thescript.php took 'n' seconds to load"); 
    } 
}); 

Je voudrais être en mesure de savoir combien de temps ce script ajax chargé l'url « http: //localhost/thescript.php ». Par exemple alert: "http: //localhost/thescript.php a pris 'n' secondes pour charger".

Répondre

5

Vous pouvez utiliser les fonctions beforeSend() et complete() pour comparer les horodatages actuels et calculer la différence.

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

Ici vous pouvez voir tous les crochets de rappel fournis par $.ajax: http://api.jquery.com/jQuery.ajax/#callback-functions

+0

i essayé d'ajouter le suivant wing: beforeSend: function() { starttime = new Date(). getTime(); }, terminé: fonction (jqXHR, textStatus) { endtime = new Date(). GetTime(); alert ((endtime - starttime) + "ms"); } le script que je cours prend environ 60s mais il affiche 5003ms ... quel semble être le problème? –

+0

La requête est-elle réellement en cours d'exécution et le chargement du script? Dans le cas où vous voulez seulement montrer le décalage horaire pour les requêtes réussies, placez l'endtime dans le rappel 'success'. –

+0

ok je vais juste faire ça –

4

Comment « bout:

var start = new Date().getTime(); 
$.ajax({ 
    type: "GET", 
    url: "http://localhost/thescript.php", 
    success: function(data){ 
    $("#container").html(data); 
    }, 
    complete: function(jqXHR, textStatus){ 
    var duration = (new Date().getTime() - start)/1000; 
    alert("http://localhost/thescript.php took '" + duration + "' second(s) to load"); 
    } 
}); 
+0

hehh, vous êtes rapide: D – Briganti

+0

pourquoi "/ 60000" ?? – Briganti

+0

@Briganti: Oh, vous avez vu ça? (Blast, je pensais que j'étais assez rapide.) Pour une raison quelconque, j'ai fait quelques minutes. J'ai posté la réponse, la page rafraîchie, et j'ai pensé ... pourquoi avez-vous fait des minutes? Et cliquez sur modifier dans une seconde. Espéré que personne ne remarquerait ... ;-) –

2

quelque chose comme ceci:

var start_ts; 
$.ajax({ 
type: "GET", 
url: "http://localhost/thescript.php", 
beforeSend: function() { 
    start_ts = new Date().getTime(); 
} 
success: function(data){ 
    $("#container").html(data); 
}, 
complete: function(jqXHR, textStatus){ 
    var end_ts = new Date().getTime(); 
    var dif = (end_ts - start_ts)/1000; /* convert milisec to sec */ 
    alert("http://localhost/thescript.php took '"+dif+"' seconds to load"); 
} 
}); 
+1

Jinx! .......... –