我正在使用 YUI io 将数据发布到我的服务器。我在发送像æ ø å 这样的外来字符时遇到了一些问题。
第一种情况:表单发布到服务器
Y.io(url, {
method: 'POST',
form: {
id: 'myform',
useDisabled: true
}
});
这会将表单的内容发布到服务器。如果我有一个名为“test1”的字段包含“æøå”,那么在服务器上我会看到 REQUEST_CONTENT="test1=%C3%A6%C3%B8%C3%A5"。这可以使用 urldecode 函数轻松解码,没有问题,但是......
第二种情况:数据以这种方式发布:
Y.io(uri, {
data : '{"test1":"æøå"}'),
method : "POST"
});
现在我在服务器 REQUEST_CONTENT="{"test1":"├ª├©├Ñ"}" 上看到了这个。我该如何解码?为什么会这样发送?
我知道我可以在发送之前使用 encodeURIComponent() 对字符串进行编码。但是io请求实际上是Model Sync操作的一部分,所以我没有直接调用io。我正在做这样的事情:
Y.User = Y.Base.create('user', Y.Model, [Y.ModelSync.REST], {....});
var user = new Y.User();
user.set('test1', 'æøå');
user.save();
因此,每次设置/读取属性时都进行编码/解码是没有意义的。
我还尝试在请求标头中设置 charset=utf-8 ,但这并没有改变任何东西。
编辑
我在 chrome 中做了更多的调试,请求是用这行代码创建的:
transaction.c.send(data);
transaction.c 是 xmlhttprequest 并且(使用 chrome 调试器)我可以看到数据是 "{"test1":"æøå"}" 执行上述代码行时,会显示待处理的网络条目(在网络选项卡下铬调试器)。请求负载显示 {"test1":"├ª├©├Ñ"} 标头是:
Accept:application/json
Content-Type:application/json; charset=UTF-8