2010-05-01 13 views
14

Tengo un método de obtención de datos que usa jQuery.ajax() para buscar archivos xml.¿Por qué jQuery.ajax() agrega un parámetro a la 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 */} 
    } ,                                       

Mi problema es: jQuery alguna manera añade un parámetro (?_=1272708280072) a la url si no se escapan (notación hexadecimal) o sin escape UTF-8 caracteres fuera del rango ASCII - creo - en el archivo nombre. Todo funciona bien si el nombre del archivo no contiene caracteres en ese rango.

El tipo está configurado en xml por lo que no debe haber una confusión de tipos. Los encabezados de los archivos xml también se configuran adecuadamente.

Puedo ver en la consola que jQuery arroja un error, pero no estoy seguro de dónde está realmente el problema.

Probablemente haya un problema con el formato de nombre de archivo, pero no encontré ningún recurso en la web en cuanto a las especificaciones de nombre de archivo AJAX. ¿Algunas ideas?

Gracias por su ayuda!

Respuesta

21

Eso es un "cache-buster" y se ignora.

El parámetro agregado cambia la URL lo suficiente como para pasar por alto la mayoría de las cachés que se encuentran entre usted y la fuente.

Si no se modificó la URL, es probable que los datos se publiquen desde cualquiera de las cachés entre usted y el recurso, incluyendo su navegador, cualquier proxy y quizás el servidor en sí.

Puede encontrar muchas explicaciones en la red. Aquí está one.

+0

Ok, genial. Parece que ese no era el problema, sin embargo. Mi llamada ajax devuelve 404 - archivo no encontrado si hay caracteres utf-8 en el nombre del archivo. Alguna idea sobre eso? – FK82

+0

@ FK82- aunque hay algunas tecnologías emergentes que pueden manejar urls UTF, http es tradicionalmente ASCII, por lo que necesita UrlEncode cualquier url que pueda contener caracteres UTF. b.t.w. '? _ = 1272708280072' es ascii entonces ese no es el problema. –

+0

El utf-8 en el nombre del archivo ya había sido escapado por un servlet Java, que prepara el archivo. Por lo tanto, ya está codificado en hexacódigo como '% 20% 20% 20' (solo un ejemplo). Por lo tanto, el formato es como 'filename_% 20% 20% 20.xml'. El problema parece ser con Tomcat, ya que reemplaza el carácter '%' con '% 25' que es el código hexadecimal correspondiente. Por lo tanto, necesitaré una solución para codificar los caracteres especiales, que Tomcat no analiza. Debería ser capaz de resolver eso yo mismo. ¡Gracias por tu ayuda! – FK82

1

debe ser ignorado.

Sólo para hacer una prueba, si está utilizando rieles, no utilice el javascript_include_tag pero pasar el JavaScript como

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

No va a permitir que el caché de romper y con eso se puede ver si tu problema es donde crees que es.

+2

Cache buster probablemente sea jQuery's, ya que está configurado con la bandera 'cache: false'. El problema parece ser otro más. Eche un vistazo al comentario anterior, si lo desea. – FK82

Cuestiones relacionadas