为什么jQuery.ajax()会在url中添加参数?

时间:2010-05-01 10:23:40

标签: javascript jquery ajax parameters

我有一个使用jQuery.ajax()来获取xml文件的数据获取方法。

/*    */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 */}
    } ,                                                                                                                                                         

我的问题是:jQuery以某种方式将一个参数(?_=1272708280072)添加到url如果有转义(十六进制表示法)或未转义的utf-8字符在ASCII范围之外 - 我相信 - 在文件中名称。如果文件名不包含该范围内的字符,则一切正常。

类型设置为xml,因此不应混淆类型。 xml文件的标题也已充分设置。

我可以从控制台看到jQuery会抛出错误,但我不确定问题究竟在哪里。

可能是文件名格式问题,但我没有在网上找到任何有关AJAX文件名规范的资源。有什么想法吗?

谢谢你的帮助!

2 个答案:

答案 0 :(得分:21)

这是一个'缓存破坏者'而被忽略。

添加的参数会更改网址,以便绕过您和源之间的大多数缓存。

如果未修改Url,则可能会从您与资源之间的任何一个缓存(包括浏览器,任何代理以及服务器本身)提供数据。

你可以在网上找到很多解释。这是one

答案 1 :(得分:1)

应该被忽略。

只是为了进行测试,如果您使用的是rails,请不要使用javascript_include_tag,而是将JavaScript传递为

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

它不会启用缓存破坏程序,您可以看到问题是否在您认为的位置。