【问题标题】:jQuery ajax POST jsonjQuery ajax POST json
【发布时间】:2012-12-18 19:09:03
【问题描述】:

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

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

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} 之前 -它-...") '

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

【问题讨论】:

  • 正确的代码示例将有助于回答您的问题。
  • 同时发布您的服务器端代码。
  • @Ek0nomik - 服务器端代码只有 1 行,它接收 ajax 调用并使用 decode_json? 解码 json?服务器端不多,但供您参考的是:(在 perl 中),使用 JSON;我的 $string = decode_json($data); # $data 是实际的 json 编码字符串。让我知道是否清楚...
  • 忽略大括号之类的东西!? “牙套之类的东西”已经摧毁了整个文明。

标签: jquery ajax json post


【解决方案1】:

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

$.ajax({
    url: 'server_api',
    type: 'GET',
    data: JSON.stringify(data_obj),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json'
});

【讨论】:

  • 数据被字符串化。见第一行。
  • 您的示例显示 data_obj 是对象哈希,而不是字符串。
  • 感谢大家的指点。实际上,我花了一个小时左右的时间阅读了 Javascript 和 perl 中的编码/解码问题,并使用 JavaScript 中的直接编码字符串进行了修复,使用 encodeURIComponent 并在后端 perl 中解码,然后再次在 Javascript 中解码以获得结果。再次感谢。
【解决方案2】:

您可能将编码的 Unicode 字符传递给 decode_json,而不是二进制 UTF-8 字符。 See here 这个问题和两个简单​​的潜在修复。

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

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

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

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

数据对象,字符串

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

processData,布尔值

默认:真

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

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

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

因此,您可能希望自己对data_obj 进行字符串化,而不是让.ajax 为您完成。

您是否尝试过简单地回显您收到的(服务器端)原始数据(不运行 json 解码)以查看您在服务器端接收的内容,以及它是否符合您的预期?如果没有为您复制它的示例数据集,很难说出您的问题必然是什么。不过,我假设它与 Perl 的 json_decode 和相关编码问题(这里的第一行)有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多