2007年4月16日

JQuery, AJAX, 以及 HTTP_REFERER

有人可能會在網頁應用系統上會使用 HTTP_REFERER 這個 http 表頭參數來進行某些控管作業,一般來說瀏覽器會自動加上這個 http 表頭,不過如果是使用 JQuery 提供的 AJAX 相關函數時還能不能在伺服端取得這個 http 表頭內容呢?

很不幸的是 JQuery 不會主動加上該 http 表頭,所以必須手動自己處理。

幸運的是 JQuery 自從 1.1 開始增加了一個指定 XMLHttpRequest(XHR) 物件預設值的界面函式:$.ajaxSetup( settings ),透過這個函式可以讓 XHR 在進行各項 AJAX 呼叫時提供一些額外的設定處理。

指定 XHR 物件的預設設定必須在進行 AJAX 呼叫前執行 $.ajaxSetup( settings ) 這個函式,通常會放在 $(document).ready() 內執行,以下範例是設定當 XHR 要對遠端主機傳送資料前先設定 Referer 這個 http 表頭內容,如果還有其他設定則可比照辦理。

// 初始化 XHR ,加入 HTTP_REFERER 資訊
  $.ajaxSetup( {
    beforeSend: function(xhr) {
      var currentURL = document.location.href;
      if( currentURL.lastIndexOf( "?" ) >= 0 ) {
         currentURL = currentURL.substr( 0, currentURL.lastIndexOf( "?" ) );
      }
      xhr.setRequestHeader("Referer", currentURL );
    }
  });

其他設定範例請參考 $.ajaxSetup(settings)