Javascript 强迫;charset=x-用户定义'&引用;关于jqueryajaxpost

Javascript 强迫;charset=x-用户定义'&引用;关于jqueryajaxpost,javascript,jquery,ajax,character-encoding,hessian,Javascript,Jquery,Ajax,Character Encoding,Hessian,我试图从Javascript应用程序调用Hessian web服务,但在解析响应时遇到问题,因为jQuery将响应视为文本并剥离其第一个字节。 在我的研究中,我发现需要将字符集设置为'charset=x-user-defined',以便浏览器保持我的字节不变。但是,根据ajax文档: 向服务器发送数据 默认情况下,Ajax请求使用GET HTTP方法发送。如果 如果需要POST方法,则可以通过设置 类型选项的值。此选项将影响 数据选项被发送到服务器POST数据将始终为 根据W3C,使用UTF-8

我试图从Javascript应用程序调用Hessian web服务,但在解析响应时遇到问题,因为jQuery将响应视为文本并剥离其第一个字节。 在我的研究中,我发现需要将字符集设置为'charset=x-user-defined',以便浏览器保持我的字节不变。但是,根据ajax文档:

向服务器发送数据

默认情况下,Ajax请求使用GET HTTP方法发送。如果 如果需要POST方法,则可以通过设置 类型选项的值。此选项将影响 数据选项被发送到服务器POST数据将始终为 根据W3C,使用UTF-8字符集传输到服务器 XMLHTTPRequest标准。

事实上,无论我使用什么设置,字符集都不会改变。我试过以下方法,分别地,一次全部地,但没有成功

$.ajax({
        type : 'POST',
        url : url,
        timeout : 3000,
        data : parameters,

        contentType : "x-application/hessian; charset=x-user-defined'",
        mimeType: 'text/plain; charset=x-user-defined',
        headers: { 
            Accept : "text/plain; charset=x-user-defined",
            "Content-Type": "text/plain; charset=x-user-defined"
        },
        beforeSend : function(xhr) {                
            xhr.overrideMimeType("text/plain; charset=x-user-defined");            
        }
    })
此外,我还试图处理jQuery中定义的数据转换器和自定义内容类型,但没有成功

按照标准,我似乎无法做到这一点。它可以与GET一起工作,但不能与POST一起工作,而Hessian协议需要POST


你有什么想法吗?或者我需要从头开始构建我的XHR方法吗?

结果是我在其他地方犯了一个愚蠢的错误。但无论如何,我找到了一种处理请求和响应的二进制数据的好方法


希望您觉得有用

您的问题是关于发布的数据还是回复数据?您编写的jQuery将回复视为文本,但随后引用了文档中有关发布数据的部分。这是真的!我没有注意到上面写着“到服务器”。我的问题是从服务器读取数据。而且,我相信,由于jQuery不愿意更改头,所以我不会得到我需要的二进制响应。响应的处理方式由
数据类型
选项控制。除非您指定
json
xml
jsonp
,或者服务器在
内容类型
响应头中设置了其中一个,否则我认为它只是以字符串形式逐字返回数据。运气不好。例如,我只是尝试了“dataType:“html”,因为这样jQuery就不应该解析数据。但响应仍然被视为字符串。我在Fiddler中看到的响应的第一个字节(十六进制)是37 63 31 0D 0A 48 02 00 52 43 1B 68 65 73 73 69 61 6E 2E 64 6F 6D 61 69 6E 61 6E 2E 64 6F 6D 61 69 6E,但当我尝试解析它们时,响应会被修剪02 00 52 43 1B 68 73 69 61 61 6E 2E 64 6F 6D 61 69 6E
define(function() {
// Do setup work here
function configurationException(message) {
    throw new Error(message + " missing from configuration object");
}

return {
    post : function(config) {
        if (config) {
            var url = config.url || configurationException("url");
            var done = config.done || configurationException("callback function");
            var timeout = config.timeout || 10000;
            var data;
            if (config.data) {
                data = config.data;
            } else {
                data = null;
                console.warn('No data is specified in binaryPost');
            }

            var request = new XMLHttpRequest();
            request.open("POST", url, true);
            request.responseType = "arraybuffer";
            request.setRequestHeader("Content-Type", "x-application/hessian;");

            request.onload = function(oEvent) {
                var arrayBuffer = request.response; // Note: not oReq.responseText
                if (arrayBuffer) {
                    var byteArray = new Uint8Array(arrayBuffer);

                    done(byteArray);
                }
            };

            request.send(data);

        } else {
            throw new Error("Configuration object is missing");
        }
    }
};
});