2010-05-01 14 views
14

Ho un metodo di recupero dati che utilizza jQuery.ajax() per recuperare i file xml.Perché jQuery.ajax() aggiunge un parametro all'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 */} 
    } ,                                       

Il mio problema è: jQuery aggiunge qualche modo un parametro (?_=1272708280072) all'URL se ci sono scappati (notazione esadecimale) o escape caratteri UTF-8 al di fuori del range ASCII - credo - nel file nome. Funziona tutto bene se il nome del file non contiene caratteri in quell'intervallo.

Il tipo è impostato su xml quindi non ci dovrebbe essere una confusione di tipi. Anche le intestazioni dei file xml sono impostate in modo adeguato.

Posso vedere dalla console che jQuery genera un errore, ma non sono sicuro di dove sia realmente il problema.

Probabilmente un problema con la formattazione del nome del file, ma non ho trovato alcuna risorsa sul Web per quanto riguarda le specifiche del nome del file AJAX. Qualche idea?

Grazie per il vostro aiuto!

risposta

21

Questo è un "cache-buster" e viene ignorato.

Il parametro aggiunto modifica l'url quanto basta per ignorare la maggior parte delle cache che si trovano tra te e la sorgente.

Se l'URL non è stato modificato, è probabile che i dati vengano serviti da una qualsiasi delle cache tra l'utente e la risorsa, inclusi il browser, eventuali proxy e forse il server stesso.

È possibile trovare molte spiegazioni in rete. Ecco one.

+0

Ok, fantastico. Sembra che non fosse questo il problema, però. La mia chiamata ajax restituisce 404 - file non trovato se ci sono caratteri utf-8 nel nome del file. Qualche idea su questo? – FK82

+0

@ FK82- anche se ci sono alcune tecnologie emergenti in grado di gestire gli URL UTF, http è tradizionalmente ASCII quindi è necessario UrlEncode qualsiasi URL che può contenere caratteri UTF. b.t.w. '? _ = 1272708280072' è ascii, quindi non è questo il problema. –

+0

L'utf-8 nel nome del file era già stato scappato da un servlet java, che prepara il file. Quindi è già codificato in hexcode come '% 20% 20% 20' (solo un esempio). Il formato quindi è come 'filename_% 20% 20% 20.xml'. Il problema sembra essere con Tomcat, poiché sostituisce il carattere '%' con '% 25', che è il codice esadecimale corrispondente. Quindi, avrò bisogno di una soluzione per codificare i caratteri speciali, che non vengono analizzati da Tomcat. Dovrei riuscire a capirlo da solo. Grazie per l'aiuto! – FK82

1

deve essere ignorato.

Solo per fare un test, se si utilizza rotaie, non utilizzare il javascript_include_tag ma passare il JavaScript come

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

Non consentirà la cache-buster e con questo si può vedere se il tuo problema è dove pensi che sia.

+2

Cache buster probabilmente è jQuery come è impostato il flag 'cache: false'. Il problema sembra essere un altro però. Dai un'occhiata al commento sopra, se ti va. – FK82

Problemi correlati