2012-09-27 98 views
0

我有一個單獨的頁面js應用程序,並且向自己的包含日誌的服務器發送自定義標頭,但是我需要控制這些標頭的大小,因爲我的服務器不會接受大於8k的請求。在發送之前修改jQuery請求頭文件

到目前爲止,我的解決方案是攔截來自我的應用程序的所有傳出的ajax請求。

我正在使用jQuery Global Ajax Events,特別是ajaxSend來攔截所有請求。我無法使用beforeSend,因爲這是本地事件。

我似乎無法訪問回調中的請求標頭。我需要讀取所有請求的標題,並且如果日誌標題太大,請將其剪下。

+0

退房這樣的回答:http://stackoverflow.com/questions/7686827/how-can-i-add-a-custom-http-header-to-ajax-request-with-js-or -jquery –

回答

3

您希望使用beforeSend在請求發送前修改請求。這些都包含在您鏈接的文檔中。全球ajaxSend事件不會幫助您篡改請求。距離全球最近的東西是電話ajaxSetup,通過beforeSend選項是所有後續ajax調用的默認選項。


似乎沒有簡單的方法從XMLHttpRequest對象獲取請求標頭。由於我假設你自己設置你的日誌標題,然而,你也許可以掛接到這些標題的設置,並存儲訪問參考他們:

XMLHttpRequest.prototype.readableHeaders = {}; 
XMLHttpRequest.prototype.proxiedSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader; 
XMLHttpRequest.prototype.setRequestHeader = function(header, value) { 
    this.proxiedSetRequestHeader(header, value); 
    this.readableHeaders[header] = value; 
}; 

通過這種方式,你應該能夠直接檢查jqXHR.readableHeaders對象的特定日誌記錄標題,並在beforeSend中再次調用setRequestHeader,以便截斷字符串(如果需要)。

要檢索標頭,您需要從jqXHR對象訪問XMLHttpRequest的基礎實例。使用xhr()函數來檢索實例。

$.ajaxSetup({ 
    beforeSend: function (jqXHR, settings) { 
    console.log(settings.xhr().readableHeaders); 
    } 
}); 
+0

感謝大衛,但是我想攔截**所有請求**,'beforeSend'是一個本地ajax事件,這就是爲什麼我使用'ajaxSend' –

+0

@ alexandru.topliceanu:啊,對不起。您可以使用'ajaxSetup'爲所有請求設置一個特定的'beforeSend'偵聽器默認值;看到我更新的答案。 –

+0

太棒了,但我仍然需要訪問標題才能修改它們。 'beforeSend'被'jqXHR'和'settings'作爲params調用,它們都不允許我檢索請求標頭。即我可以使用'jqXHR.setRequestHeader()'來設置標題,但是我如何讀取所有標題。 –

相關問題