2011-11-03 40 views
6

Tôi đang sử dụng jQuery ajax để gọi dịch vụ WCF của tôi bằng HTTP POST. Câu trả lời là GZIP được mã hóa và điều này gây ra sự cố trong môi trường của tôi. (Xem this question). Nếu đáp ứng không phải là mã hóa GZIP thì mọi thứ đều ổn.bài đăng ajax - Tôi muốn thay đổi giá trị tiêu đề Chấp nhận mã hóa

Vì vậy, tìm trong Fiddler, tôi thấy rằng jQuery tạo truy vấn có tiêu đề sau:

Accept-Encoding: gzip,deflate,sdch 

Nếu, qua cáy, tôi thay đổi giá trị này để None, sau đó phản ứng không được nén, đó là những gì Tôi muốn. Tất cả những gì tôi cần làm là thay đổi giá trị trong tiêu đề "Accept-Encoding".

Dường như không thể thay đổi giá trị tiêu đề này thông qua lệnh .ajax. (Xem this forum post).

Bất kỳ ai cũng có thể cho tôi biết tùy chọn nào tôi phải thay đổi giá trị tiêu đề này.

Đây là nỗ lực hiện tại của tôi. Thông số của tôi headers dường như bị bỏ qua.

$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

Liệu câu trả lời trợ giúp này: http://stackoverflow.com/questions/5771878/jquery -ajax-request-change-user-agent – sberry

Trả lời

0

Tôi không chắc chắn rằng 'không' là tùy chọn hợp lệ ở đó. Tôi tin rằng nếu bạn đặt tiêu đề để chấp nhận mã hóa 'xì hơi' thay vì 'không', điều đó sẽ phân loại vấn đề của bạn.

ví dụ:

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

Cảm ơn câu trả lời của bạn, nhưng đó không thực sự là vấn đề. Vấn đề là tôi không thể thay đổi giá trị 'Chấp nhận mã hóa' thành bất kỳ thứ gì, không phải 'không' cũng như 'làm lệch'. –

+0

Ah, tôi hiểu rồi. Câu trả lời dài hơn của tôi sẽ giúp bạn. – timecode

2

Giá trị này có thể bị ghi đè sau trong tiến trình.

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.

Hãy thử thực hiện beforeSend như đã thấy trong đoạn code dưới đây bản demo và giá trị tiêu đề (s) sẽ nhận được để yêu cầu chính thức bây giờ (ngón tay vượt qua).

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

Điều này là không thể vì chọn loại mã hóa phù hợp theo trình duyệt. Nếu bạn làm điều này

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'); 
},...... 

Bạn sẽ thấy lỗi này:

Refused to set unsafe header "Accept-Encoding" 

Ref: App Engine Accept-Encoding

Các vấn đề liên quan