2010-05-01 131 views
14

我有一個數據讀取方法,使用jQuery.ajax()來獲取xml文件。爲什麼jQuery.ajax()向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 */} 
    } ,                                       

我的問題是:jQuery的莫名其妙增加了一個參數(?_=1272708280072)到URL如果有逃脫(十六進制格式)或ASCII範圍之外轉義的UTF-8字符 - 我相信 - 在文件中名稱。如果文件名不包含該範圍內的字符,則一切正常。

類型設置爲xml所以不應該有類型混淆。 xml文件的標題也被充分設置。

我可以從控制檯看到jQuery拋出一個錯誤,但我不確定問題到底在哪裏。

可能是文件名格式化的問題,但我沒有在網上找到任何有關AJAX文件名稱規範的資源。有任何想法嗎?

感謝您的幫助!

回答

21

這是一個'cache-buster'並被忽略。

添加的參數更改網址就足以繞過您和源之間的大多數所有緩存。

如果Url沒有被修改,很可能數據將從您和資源之間的任何一個緩存中提供,包括您的瀏覽器,任何代理服務器以及服務器本身。

你可以在網上找到很多解釋。這裏是one

+0

好的,太好了。似乎這不是問題,但。我的ajax調用返回404 - 如果文件名中有utf-8字符,則找不到文件。有關於此的任何想法? – FK82 2010-05-01 11:07:04

+0

@ FK82-雖然有一些新興的技術可以處理UTF URL,但HTTP通常是ASCII,因此您需要UrlEncode任何可能包含UTF字符的URL。 b.t.w. '?_ = 1272708280072'是ascii,所以這不是問題。 – 2010-05-01 11:35:49

+0

文件名中的utf-8已經被準備文件的java servlet轉義了。所以它已經用'%20%20%20'這樣的十六進制編碼(只是一個例子)。因此格式就像'filename_%20%20%20.xml'。這個問題似乎與Tomcat有關,因爲它用相應的十六進制代碼「%25」代替了'%'字符。所以,我需要一個解決方案來編碼特殊字符,這些特殊字符不會被Tomcat解析。我應該能夠自己弄清楚。謝謝你的幫助! – FK82 2010-05-01 13:03:24

1

它應該被忽略。

只是爲了測試,如果你正在使用的軌道,不要使用javascript_include_tag但通過JavaScript作爲

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

它不會使緩存無效,並以您可以看到,如果你的問題是你認爲它的地方。

+2

Cache buster可能是jQuery的,因爲它設置了'cache:false'標誌。這個問題似乎是另一個問題。看看上面的評論,如果你喜歡。 – FK82 2010-05-01 11:06:41