我正在使用jQuery ajax通过HTTP POST调用我的WCF服务。响应是GZIP编码的,这会导致我的环境出现问题。 (见this question)。如果响应不是GZIP编码,一切都很好。
所以看看Fiddler,我看到jQuery生成的查询有以下标题:
Accept-Encoding: gzip,deflate,sdch
如果,通过fiddler,我将此值更改为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 :(得分:4)
此值可能会在稍后的过程中被覆盖。
参考:http://api.jquery.com/jQuery.ajax/
标题(默认值:{})说明
类型:PlainObject
与请求一起发送的附加标头键/值对的对象。 此设置在调用beforeSend函数之前设置;因此,标题设置中的任何值都可以在beforeSend函数中覆盖。
尝试实施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);
答案 1 :(得分: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"
答案 2 :(得分:0)
我不确定那里的'none'是一个有效的选择。我相信如果您将标题设置为接受编码'deflate'而不是'none',那么应该解决您的问题。
e.g。
headers: { 'Accept-Encoding' : 'deflate' }