jQuery ajax POST json

jQuery ajax POST json,jquery,ajax,json,post,Jquery,Ajax,Json,Post,所以,这里是我的问题(我确实研究并试图通过查看此处发布的其他类似问题来解决我的问题,但不起作用) 代码片段(忽略大括号和其他内容): 在服务器端,我尝试使用perl模块、JSON和函数decodeu JSON进行解码,但它抛出了一个异常,“JSON字符串中格式错误的UTF-8字符,位于字符偏移量48处(在“\x{92f}执行它之前-…”) 我尝试使用POST方法和内容类型组合,但没有成功。jQuery文档是否指定默认情况下编码为UTF-8?请提供帮助?尝试将数据作为字符串化JSON传递 $.aj

所以,这里是我的问题(我确实研究并试图通过查看此处发布的其他类似问题来解决我的问题,但不起作用)

代码片段(忽略大括号和其他内容):

在服务器端,我尝试使用perl模块、JSON和函数decodeu JSON进行解码,但它抛出了一个异常,“JSON字符串中格式错误的UTF-8字符,位于字符偏移量48处(在“\x{92f}执行它之前-…”)


我尝试使用POST方法和内容类型组合,但没有成功。jQuery文档是否指定默认情况下编码为UTF-8?请提供帮助?

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

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

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

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

您可能正在传递编码的Unicode字符以解码_json,而不是二进制UTF-8字符。对于这个问题和两个简单的潜在修复

其他一些事情是,您没有在数据_obj中转义实体名称(我假设这些名称本身就是实体名称,给定了它们的关联值)。相反,它试图插入这些变量的内容。我假设您希望这些是标识符本身:

data\u obj={'id':n\u id,'links\u json':json\u string}

除非您只是使用此访问已存储在服务器上的数据,否则您应该考虑使用POST(或PoT),以更适当地休息。 此外,GET是通过附加到URL来执行的,您需要注意:

数据对象,字符串

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

processData,布尔值

默认值:true

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

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

此外,
datatype
与您正在发送的数据无关,它指的是您希望接收回的数据。我想你已经意识到了,但我想确定一下

因此,您可能希望自己对
数据对象进行字符串化,而不是让
.ajax
为您执行


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

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

其他一些事情是,您没有在数据_obj中转义实体名称(我假设这些名称本身就是实体名称,给定了它们的关联值)。相反,它试图插入这些变量的内容。我假设您希望这些是标识符本身:

data\u obj={'id':n\u id,'links\u json':json\u string}

除非您只是使用此访问已存储在服务器上的数据,否则您应该考虑使用POST(或PoT),以更适当地休息。 此外,GET是通过附加到URL来执行的,您需要注意:

数据对象,字符串

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

processData,布尔值

默认值:true

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

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

此外,
datatype
与您正在发送的数据无关,它指的是您希望接收回的数据。我想你已经意识到了,但我想确定一下

因此,您可能希望自己对
数据对象进行字符串化,而不是让
.ajax
为您执行


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

适当的代码示例将有助于回答您的问题。同时发布服务器端代码。看看@Ek0nomik-服务器端代码只是一行,它接收ajax调用并使用,解码json?服务器端的内容不多,但供您参考的是:(在perl中)使用JSON;my$string=decode_json($data);35;$数据是实际的json编码字符串。如果清楚了,请告诉我…忽略牙套和其他东西!?“大括号和其他东西”已经摧毁了整个文明。适当的代码示例将有助于回答您的问题。同时发布您的服务器端代码。看看@Ek0nomik-服务器端代码只是一行,它接收ajax调用并使用decodejson解码json?在服务器端没有太多,但对于您的r