2011-11-03 63 views
6

我正在使用jQuery ajax通過HTTP POST調用我的WCF服務。響應是GZIP編碼的,這會在我的環境中造成問題。 (見this question)。如果響應不是GZIP編碼,一切都很好。ajax post - 我想更改Accept-Encoding標頭值

所以在尋找提琴手,我看到了jQuery生成的查詢有以下標題:

Accept-Encoding: gzip,deflate,sdch 

如果通過小提琴手,我將此值更改爲None,那麼響應不壓縮,這是什麼我想要。我需要做的就是更改「Accept-Encoding」標題中的值。

看起來不可能通過.ajax命令更改此標題值。 (見this forum post)。

任何人都可以告訴我什麼選項,我必須改變這個頭值。

這是我目前的嘗試。我的headers參數似乎被忽略。

$telerik.$.ajaxSetup({ 
     accepts: 'application/json, text/javascript, */*' 
    }); 

    var parameters = { 
     "playerId": args.playerId 
    }; 

    var dataInJsonFormat = '{ "playerId": ' + args.playerId + '}'; 

    var ajaxCallParameters = { 
     accepts: 'application/json, text/javascript, */*', 
     async: true, 
     cache: false, 
     contentType: "application/json; charset=utf-8", 
     url: "../Services/CmsWebService.svc/SendUpdateRequestToPlayer", 
     headers: { "Accept-Encoding" : "None" }, 
     type: "POST", 
     data: dataInJsonFormat, 
     dataType: 'json', 
     error: function (jqXHR, textStatus, errorThrown) { 
      var errorString = 'Error thrown from ajax call: ' + textStatus + 'Error: ' + errorThrown; 
      var displayPanel = document.getElementById('requestStatusUpdateResults'); 
      $telerik.$(displayPanel).text(errorString); 

     }, 
     success: function (data, textStatus, jqXHR) { 
      var displayPanel = document.getElementById('requestStatusUpdateResults'); 
      $telerik.$(displayPanel).text(data.d); 
     } 
    }; 

    $telerik.$.ajax(ajaxCallParameters); 
+0

這是否回答幫助:http://stackoverflow.com/questions/5771878/jquery -ajax-request-change-user-agent – sberry

回答

0

我不確定那裏'沒有'是一個有效的選項。我相信如果你設置標題接受編碼'deflate'而不是'none',那就應該理清你的問題。

例如

headers: { 'Accept-Encoding' : 'deflate' } 
+0

謝謝你的回答,但那不是問題。問題是我無法將「Accept-Encoding」值更改爲任何值,既不是'none'也不是'deflate'。 –

+0

啊,我明白了。那麼我的較長答案應該可以幫助。 – timecode

2

該值可能在後面的過程中被覆蓋。

Ref: http://api.jquery.com/jQuery.ajax/
headers (default: {}) description
Type: PlainObject
An object of additional header key/value pairs to send along with the request. This setting is set before the beforeSend function is called; therefore, any values in the headers setting can be overwritten from within the beforeSend function.

嘗試實施beforeSend如下面的演示代碼和標頭值(一個或多個)看到應該得到的最終請求現在(手指交叉)。

var ajaxParams = { 
    accepts: 'text/html', 
    async: true, 
    cache: false, 
    contentType: 'text/html', 
    url: 'http://www.google.com', 
    type: 'GET', 
    beforeSend: function (jqXHR) { 
     // set request headers here rather than in the ajax 'headers' object 
     jqXHR.setRequestHeader('Accept-Encoding', 'deflate'); 
    }, 
    success: function (data, textStatus, jqXHR) { 
     console.log('Yay!'); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     console.log('Oh no!'); 
    }, 
    complete: function (jqXHR, textStatus) { 
     console.log(textStatus); 
     console.log(jqXHR.status); 
     console.log(jqXHR.responseText); 
    } 
}; 

$.ajax(ajaxParams); 
2

這是不可能的,因爲通過瀏覽器選擇正確的編碼類型。 如果你這樣做

var ajaxParams = { 
accepts: 'text/html', 
async: true, 
cache: false, 
contentType: 'text/html', 
url: 'http://www.google.com', 
type: 'GET', 
beforeSend: function (jqXHR) { 
    // set request headers here rather than in the ajax 'headers' object 
    jqXHR.setRequestHeader('Accept-Encoding', 'deflate'); 
},...... 

你會看到這樣的錯誤:

Refused to set unsafe header "Accept-Encoding" 

編號:App Engine Accept-Encoding