您可能将编码的 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.