2011-12-06 61 views
1

我想執行一個使用jQuery的ajax-post請求,並且我需要添加自定義標頭(對於dJango CSRF)。我已經嘗試了一些這樣的代碼:jQuery的Ajax beforeSend不適用於Firefox

var load = function() { 
    $.ajax({ 
     type: 'POST', 
     url: '/ajax/get_page/', 
     data: $.toJSON({ 
      section: section, 
      subsection: subsection, 
      page: page.page 
     }), 
     beforeSend: function(xhr, settings) { 
      xhr.setRequestHeader("exmpl", "abcdef"); 
     }, 
     success: function (data){ 
      container.html(data); 
      page.init(container); 
      show(); 
     } 
    }); 
} 

它在Chrome中工作正常,但在Firefox(的Fedora,火狐8的jQuery 1.7)無法正常工作。它似乎甚至不執行beforeSend函數。

任何想法?

+1

是beforeSend失敗,還是xhr.setRequestHeader(「exmpl」,「abcdef」);如果你只是提醒('某事')會怎麼樣;在那裏? – MattW

+0

我試過在befireSend中發出警報,並且失敗了。在Firefox beforeSend完全沒有執行=( –

+0

)這並不是說這可以幫助你,但我只是在Firefox 8中嘗試過,它運行良好。看起來像,根據你如何標記這篇文章,你有幾個不同的JS庫你可以嘗試從頭開始,只用jQuery和你自己的腳本創建一個基本的ajax調用,然後逐個添加其他外部引用,直到你可以重新打開它爲止。 。 – MattW

回答

0

我只是猜測在這裏,但$ .ajax.beforeSend應該在Firefox中工作得很好,但是在Firefox中有一個已知的setRequestHeader問題,並且它通常需要在運行setRequestHeader之前打開XMLHttpRequest,但這是在本地JavaScript,我不知道是否jQuery已經解決了這個內部莫名其妙?

喜歡的東西:

xhr.open(method,url,async,username,password); 
xhr.setrequestheader("exmpl", "abcdef"); 

檢查螢火蟲爲類似「錯誤:未捕獲的異常:[異常...‘組件返回故障代碼:0x804b000f [nsixmlhttprequest.setrequestheader]’,看看是否是錯誤記錄,或者有記錄的所有其他錯誤,張貼在這裏

編輯:閱讀文檔時,在另一方面爲$就這樣說的:

At present, due to a bug in Firefox where .getAllResponseHeaders() returns the empty string although .getResponseHeader('Content-Type') returns a non-empty string, automatically decoding JSON CORS responses in Firefox with jQuery is not supported.

不知道這是否與你的問題有關,因爲它不是真正的功能,但聽起來有點相關,對於Ajax的jQuery pages有一個解決方法。

相關問題