2010-05-01 5 views
14

J'ai une méthode de récupération de données qui utilise jQuery.ajax() pour récupérer des fichiers XML.Pourquoi jQuery.ajax() ajoute un paramètre à l'URL?

/* */data: function() {                                   
                                           /* debug */try { 
     var url = arguments[0] ;                                 
     var type = arguments[1] ;                                
     var scope = arguments[2] ;                                
     var callback = arguments[3] ;                               

     var self = this ;                                  
      if(this.cache[url]) {                                
       callback(this.cache[url]) ;                              
      } else if(!this.cache[url]) {                              

       $.ajax({                                   
        type: "GET" ,                                
        url: url ,                                 
        dataType: type ,                                
        cache: false ,                                
        success: function(data) {                             

          if(type == "text/xml") {                                                                     
           var myJson = AUX.json ;                           
           var jsonString = myJson.build(data,scope,null) ;                     
           var jsonObject = $.parseJSON(jsonString) ;                      
           self.cache[url] = jsonObject ;                         
           callback(url) ;                             

          } else if(type == "json") {                           

           self.cache[url] = data ;                           
           callback(url) ;                             

          }                                 

        } ,                                   
        error: function() {                               
         throw "Ajax call failed." ;                            
        }                                   
       }) ;                                    

      }                                     
                                           /* debug */} catch(e) { 
                                           /* debug */  alert("- caller: signTutor.data\n- " + e) ; 
                                           /* debug */} 
    } ,                                       

Mon problème est: jQuery ajoute en quelque sorte un paramètre (?_=1272708280072) à l'url si on se sont échappés (notation hexadécimale) ou unescaped caractères UTF-8 en dehors de la plage ASCII - je crois - dans le fichier prénom. Tout fonctionne bien si le nom de fichier ne contient pas de caractères dans cette plage.

Le type est défini sur xml, donc il ne devrait pas y avoir de confusion de types. Les en-têtes des fichiers xml sont également définis correctement.

Je peux voir à partir de la console que jQuery génère une erreur, mais je ne suis pas sûr de l'origine du problème.

Probablement un problème avec la mise en forme du nom de fichier, mais je n'ai trouvé aucune ressource sur le web quant aux spécifications du nom de fichier AJAX. Des idées?

Merci pour votre aide!

Répondre

21

Ceci est un 'cache-buster' et est ignoré.

Le paramètre ajouté modifie l'URL juste assez pour ignorer la plupart des caches qui se trouvent entre vous et la source. Si l'URL n'a pas été modifiée, il est probable que des données soient servies à partir de l'un des caches entre vous et la ressource, y compris votre navigateur, vos proxys et peut-être le serveur lui-même.

Vous pouvez trouver beaucoup d'explications sur le net. Voici one.

+0

Ok, super. On dirait que ce n'était pas le problème, cependant. Mon appel ajax renvoie 404 - fichier introuvable s'il y a des caractères utf-8 dans le nom du fichier. Des idées là-dessus? – FK82

+0

@ FK82- Bien qu'il existe des technologies émergentes capables de gérer les URLs UTF, http est traditionnellement ASCII, donc vous devez UrlEncode toute URL pouvant contenir des caractères UTF. b.t.w. '? _ = 1272708280072' est ascii donc ce n'est pas le problème. –

+0

L'utf-8 dans le nom de fichier était déjà échappé par une servlet Java, qui prépare le fichier. Donc, il est déjà codé en hexcode comme '% 20% 20% 20' (juste un exemple). Le format est donc similaire à 'filename_% 20% 20% 20.xml'. Le problème semble être avec Tomcat, car il remplace le caractère '%' par '% 25' qui est le code hexadécimal correspondant. Donc, j'aurai besoin d'une solution pour encoder les caractères spéciaux, qui ne sera pas analysée par Tomcat. Je devrais être capable de comprendre ça moi-même. Merci de votre aide! – FK82

1

il doit être ignoré.

Juste pour faire un test, si vous utilisez des rails, ne pas utiliser le javascript_include_tag mais passer le JavaScript comme

<script src="/path/for/the/script/script.js" type="text/javascript"></script> 

Il ne permettra pas le cache-buster et que vous pouvez voir si votre problème est là où vous pensez que c'est.

+2

Cache buster est probablement jQuery comme défini le drapeau 'cache: false'. Le problème semble être un autre si. Jetez un oeil sur le commentaire ci-dessus, si vous le souhaitez. – FK82

Questions connexes