Col*_*dus 7 javascript ajax jquery google-chrome google-chrome-extension
我在chrome扩展程序上使用jQuery发送一个AJAX POST请求,但数据没有按预期到达,重音字符变得格格不入.
文字"HÄGERSTEN"变成"H"GERSTEN".
该文本在控制台等中显示正常,只有通过AJAX才能显示如上所述的其他页面.我的AJAX调用是基本的,我通过jQuery $ .ajax发送数据对象.我已尝试使用和不使用contentType,UTF-8和ISO-8859-1.没有不同.
这是我进行AJAX调用的方式:
var newValues = {name: 'HÄGERSTEN'}
$.ajax({
url: POST_URL,
type: 'POST',
data: newValues,
success: function() ...
});
Run Code Online (Sandbox Code Playgroud)
该newValues对象具有更多值,但我从表单中检索它们.但是,我已尝试手动指定这些值newValues['name'] = 'ÄÄÄÄ';,但仍会导致同样的问题.
我发送AJAX的页面的原始表单元素包含属性accept-charset="iso-8859-1".也许这很重要.
目标网站正在使用Servlet/2.5 JSP/2.1.只是因为它可能会有所作为.
我认为这是一个编码问题,因为我知道这应该是因为Chrome扩展要求脚本文件是UTF-8编码的,这可能与插件运行的网站和目标AJAX页面(同一网站)冲突正在使用ISO-8859-1编码,但我不知道如何处理它.我已经尝试了几种解码/编码UTF-8到ISO-8859-1和其他技巧的方法,但没有成功.
我已经尝试使用encodeURIComponent我的值,这只会使它们显示在显示我通过POST发送的值的表单上,例如H%C3%84GERSTEN.
我无法访问网站服务器,无法告诉您这是否是他们身边的问题,但我不这么认为.
UPDATE
现在我已经了解POST数据必须以UTF-8发送!那么转换不是问题吗?
我不知道是否可以使用 POST-data 和 AJAX 来解决。也许如果我进行纯 JavaScript XHR AJAX 调用,我也许能够以我喜欢的方式发送编码的 POST 数据。我不知道。
然而,在绝望中,我尝试了最后的选择(或者看起来像这样的选择);将请求作为 GET 数据发送。我很幸运,目标页面接受了 GET 数据。
显然,问题仍然存在,因为我以同样的方式发送数据,采用 UTF-8 编码。因此,我没有将数据作为对象发送,而是使用我自己的函数将数据解析为 URL 友好的字符串escape,确保它们是 ISO-8859-1 友好的(因为encodeURIComponent将 URI 编码为 UTF-8,同时对escape字符串进行编码,使它们与ISO-8859-1)。
这个简单的功能解决了我的头痛问题:
function URLEncodeISO(values) {
var params = [];
for(var k in values) params[params.length] = escape(k) + '=' + escape(values[k]);
return params.join('&');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |