2010-04-15 11 views
3

J'utilise getJSONP de jQuery et je veux enregistrer la durée de l'appel et la taille de la réponse pour pouvoir avoir des statistiques sur l'utilisation de mon application. Il s'agit d'un appel interdomaine ajax, donc j'ai besoin d'utiliser JSONP, mais comme l'appel JSONP n'est pas fait avec un objet XMLHttpRequest, le rappel complet de ajax de jquery ne passe pas le contenu de la réponse. Donc, ma question est de savoir comment obtenir la taille de la réponse (longueur du contenu) à partir d'un appel JSONP.ajax response byte size

$.ajaxSetup(
{ 
    complete:function(x,e) 
    { 
     log(x.responseText.length, x.responseText); 
    } 
} 

ici x est un objet XMLHttpRequest pour un appel JSON, mais pour l'appel JSONP est défini.

+1

pédant, 'x.responseText.length' vous donne le caractère * * comte, et non le nombre d'octets. –

+0

Pour des raisons de sécurité, cela n'est pas possible. – SLaks

+0

salut SLaks, merci pour la réponse rapide, mais alors la question se pose: y at-il une meilleure pratique pour y parvenir? par exemple, je peux avoir la longueur de réponse comme une propriété directe dans la réponse de JSON. mais cela signifie que si je n'ai aucun contrôle sur le serveur, je ne peux pas le faire. –

Répondre

6

vous pouvez obtenir le "Content-Length" de l'en-tête de réponse:

var contentsize; 
$.ajax('url', function(data, textstatus, request) { 
    contentsize = request.getResponseHeader("Content-Length")/1024; 
    //do stuff with your data 
}); 
+1

J'ai essayé de cette façon, mais pour moi, l'en-tête content-length renvoie toujours 0: ( –

0
$.ajax('url',function(data,textstatus,request) 
{ 
    var totalBytes = request.getResponseHeader('Content-length'); 

    //if u are looking for downloaded bytes 
    var dlBytes =request.responseText.length; 
}); 
+0

Bien que ce code puisse répondre à la question, il serait préférable d'inclure un peu de _context_, expliquant comment ça marche et quand l'utiliser.Les réponses de type code seulement ne sont pas utiles à long terme. –