jquery - ajax post - 我想更改 Accept-Encoding header 值

标签 jquery ajax wcf header

我正在使用 jQuery ajax 通过 HTTP POST 调用我的 WCF 服务。响应是 GZIP 编码的,这会在我的环境中导致问题。 (参见this question)。如果响应不是 GZIP 编码的,一切都很好。

因此,在 Fiddler 中查看,我发现 jQuery 生成的查询具有以下 header :

Accept-Encoding: gzip,deflate,sdch

如果通过 fiddler 将此值更改为 None,则响应不会被压缩,这就是我想要的。我需要做的就是更改“Accept-Encoding” header 中的值。

似乎无法通过 .ajax 命令更改此 header 值。 (参见this forum post)。

谁能告诉我必须使用哪些选项来更改此 header 值。

这是我当前的尝试。我的 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);

最佳答案

此值可能会在稍后的过程中被覆盖。

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 (如下面的演示代码所示), header 值现在应该到达最终请求(手指交叉)。

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);

关于jquery - ajax post - 我想更改 Accept-Encoding header 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7988947/

相关文章:

javascript - 如果我没有权限,如何从 Google Drive 文件夹中隐藏嵌入文件的 iframe

jquery - 使 div 在 Jquery getJson() 回调函数上可见

javascript - 如何在ajax调用之前定义变量

.net - WCF:使用相同的代码来实现 SOAP 和 JSON?

javascript - 我该怎么做才能让我的 cookie 同意横幅为每个用户 (ip) 弹出一次

javascript - 当我从 AJAX 调用 WCF web 服务时出现问题

javascript - JSONP 不显示 HTML 表中的数据

javascript - Ajax 调用 Express 应用程序不传递数据

c# - 打开/关闭网络服务

json - 调试不会序列化对象的 WCF 服务