1

所以,这是我的问题(我确实研究过并尝试通过查看此处发布的其他类似问题来解决我的问题,但没有奏效)

代码片段(忽略大括号和其他东西):

json_string = JSON.stringify(json_links); 
var data_obj = { id:n_id, links_json: json_string }; 

$.ajax({ 
url: 'server_api', 
type: 'GET', 
data: data_obj, 
dataType: 'json',

在服务器端,我尝试使用 perl 模块、JSON 和函数 decode_json 进行解码,但它会引发异常,“JSON 字符串中的 UTF-8 字符格式错误,字符偏移量为 48(在 "\x{92f}does-it-. ..") '

我尝试使用 POST 方法和内容类型组合,但它不起作用。jQuery 文档指定它默认编码为 UTF-8?请帮忙?

4

2 回答 2

6

尝试将数据作为字符串化 JSON 传递。

$.ajax({
    url: 'server_api',
    type: 'GET',
    data: JSON.stringify(data_obj),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json'
});
于 2012-12-18T19:18:44.353 回答
1

您可能将编码的 Unicode 字符传递给 decode_json,而不是二进制 UTF-8 字符。有关问题和两个简单​​的潜在修复,请参见此处

其他一些事情是您没有在 data_obj. 相反,它试图插入这些变量的内容。我假设您希望它们本身就是标识符:

data_obj = { 'id' : n_id, 'links_json' : json_string }

除非您只是使用它来访问已经存储在服务器上的数据,否则您应该考虑使用 POST(或 PUT)代替,以更恰当地使用 RESTful。

此外,GET 是通过附加到 URL 来执行的,您需要注意:

数据对象,字符串

要发送到服务器的数据。如果还不是字符串,则将其转换为查询字符串。它附加到 GET 请求的 url。请参阅 processData 选项以防止此自动处理。

处理数据,布尔值

默认值:真

默认情况下,作为对象(从技术上讲,除了字符串之外的任何内容)传入 data 选项的数据将被处理并转换为查询字符串,适合默认的内容类型“application/x-www-form-urlencoded” . 如果要发送 DOMDocument 或其他未处理的数据,请将此选项设置为 false。

因为数据是附加的 URL,即使的 javascript 试图发送正确的二进制编码的 UTF-8,它仍然可能被翻译成编码的 Unicode。

此外,datatype与您发送的数据无关它指的是您希望收到的数据。我假设你意识到了这一点,但我想确定一下。

所以你可能想把你data_obj自己串起来,而不是让你自己.ajax做。

Have you tried simply echoing out your received (server side) data raw (without running a json decode) to see what you're receiving server side, and whether it matches what you expected? It's hard to tell what your problem is necessarily without a sample dataset that replicates it for you. I'm assuming it's going to be related to Perl's json_decode and related encoding issues (the first line here), however.

于 2012-12-18T19:57:56.660 回答