2013-07-02 65 views
3

我正在嘗試執行以下jQuery.ajax請求,並且我正面臨一個奇怪的問題。jquery.ajax發佈請求在IE9中缺少內容類型,在Chrome中工作

當我使用IE9發送此請求時,contentType參數丟失,雖然我發送了它,但在請求上沒有問題。

$.ajax({ 
     type: "POST", 
     contentType: "application/x-www-form-urlencoded",   
     url: this.AgentServiceUrl + "/" + methodName, 
     data: data, 
     async: true, 
     success: function (xml, textStatus) { if (successHandler != null) successHandler(xml, textStatus); }, 
     error: function (xmlHttpRequest, textStatus, errorThrown) { if (errorHandler != null) errorHandler(state, xmlHttpRequest, textStatus, errorThrown); } 
    }); 

我使用jQuery 2.0.2和jQuery.XDomainRequest.js來處理跨域請求。

我該怎麼辦?

回答

3

$就爲了讓AJAX應用程序能夠安全跨域使用XDomainRequest請求

在Internet Explorer 8中,引入了XDomainRequest對象。這 對象允許AJAX應用程序,使安全跨域通過確保HTTP響應只能由 當前頁面讀取請求 直接如果數據源表明,響應公衆

但不幸的是純文本/滑動被支承用於請求的Content-Type頭

在XDomainRequest對象的原始化身,我們允許在Content-Type的 規範POST請求。指出 這違反了我們的目標,即只發布HTML 表單可能發出的請求,因爲HTML表單僅限於發送 三種不同內容類型的數據:text/plain, application/x-www-urlencoded和多部分/格式的數據。特別是, 有人指出,一些AJAX服務器庫將盲目 假設如果他們收到一個SOAP或JSON 內容類型的請求,則客戶端必須是可信或相同來源 (因爲HTML本身以前提供沒有辦法發出與該內容類型的交叉源 請求)。

不幸的是,當我們在稍後的IE8測試版中解決了這個問題時,我們去了 有點過分;我們將內容類型限制爲文本/純文本,但沒有 允許調用者指定數據爲 application/x-www-urlencoded形式。這是有問題的,因爲 如果指定了x-www-urlencoded 內容類型,服務器端框架(例如ASP,ASPNET等)將自動將請求的字段解析爲名稱 - 值對。

要解決當前處理HTML表格 必須重寫接收來自XDomainRequest對象的請求時請求主體手動解析成 名稱 - 值對這一問題,服務器代碼。 這使得XDomainRequest對象的支持比其他方式更加困難 。

Source

相關問題