Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在.getJSON jQuery中设置编码_Jquery_Ajax_Json_Character Encoding - Fatal编程技术网

如何在.getJSON jQuery中设置编码

如何在.getJSON jQuery中设置编码,jquery,ajax,json,character-encoding,Jquery,Ajax,Json,Character Encoding,在我的web应用程序中,我使用jQuery的$.getJSON()方法提交了一些表单字段。我在编码方面有一些问题。我的应用程序的字符集是charset=ISO-8859-1,但我认为这些字段是随UTF-8提交的 如何设置$.getJSON调用中使用的编码 我认为如果您想更改编码,您可能必须使用,请参阅下面的contentType参数(success和error回调假定html中有和): 事实上,我一个小时前就不得不这么做了,真是巧合 如果要使用$.getJSON()可以在调用之前添加以下内容:

在我的web应用程序中,我使用jQuery的
$.getJSON()
方法提交了一些表单字段。我在编码方面有一些问题。我的应用程序的字符集是
charset=ISO-8859-1
,但我认为这些字段是随
UTF-8
提交的


如何设置
$.getJSON
调用中使用的编码

我认为如果您想更改编码,您可能必须使用,请参阅下面的
contentType
参数(
success
error
回调假定html中有
):


事实上,我一个小时前就不得不这么做了,真是巧合

如果要使用
$.getJSON()
可以在调用之前添加以下内容:

$.ajaxSetup({
    scriptCharset: "utf-8",
    contentType: "application/json; charset=utf-8"
});
$.ajaxSetup({
    scriptCharset: "utf-8",
    contentType: "application/json; charset=utf-8"
});
您可以使用所需的字符集,而不是
utf-8

对选项进行了解释

contentType:
向服务器发送数据时,使用此
内容类型
。默认值为
application/x-www-form-urlencoded
,这在大多数情况下都适用

scriptCharset:
仅适用于具有
jsonp
script
数据类型和GET类型的请求。强制将请求解释为某个字符集。仅用于远程内容和本地内容之间的字符集差异

您可能需要一个或两个…

在客户端JS中使用
encodeURI()
,在服务器Java端工作中使用
urldecker.decode()


例如:

  • Javascript

    $.getJSON(
        url,
        {
            "user": encodeURI(JSON.stringify(user))
        },
        onSuccess
    );
    
  • Java

    $.getJSON(
        url,
        {
            "user": encodeURI(JSON.stringify(user))
        },
        onSuccess
    );
    
    java.net.urldecker.decode(params.user,“UTF-8”)


您需要使用Wireshark分析JSON调用,以便查看是否在JSON页面的形成中包含字符集,例如:

  • 如果页面很简单,如果是text/html
0000 48 54 50 2f 31 2 E 31 20 32 30 20 4f 4b 0d HTTP/1.1 200正常。 0010 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74。内容-类型:t 0020 65 78 74 2f 68 74 6d 6c 0d 0a 43 61 63 68 65 2d ext/html..缓存- 0030 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68对照组:无cach
  • 如果页面的类型包括带有MIME“charset=ISO-8859-1”的自定义JSON
0000 48 54 50 2f 31 2 E 31 20 32 30 20 4f 4b 0d HTTP/1.1 200正常。 0010 0a 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20.缓存控制: 0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6e 74 65 6e无缓存..内容 0030 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d t型:text/htm 0040 6c 3b 20 63 68 61 72 73 65 74 3d 49 53 4f 2d 38 l;chars et=ISO-8 0050 38 35 39 2d 31 0d 0a 43 6f 6e 6e 65 63 74 69 6f 859-1..C连接 为什么呢?因为我们不能在JSON页面上设置这样的目标:

在我的情况下,我使用制造商Connect Me 9210 Digi:

  • 我必须使用一个标志来表示将使用非标准MIME: p->theCgiPtr->=fDataType-eRpDataTypeOther
  • 它在变量中添加了新的MIME: strcpy(p->theCgiPtr->fothermetype),text/html; 字符集=ISO-8859-1“

它对我有效无需将JSON传递的数据转换为UTF-8,然后在页面上重新进行转换…

使用此函数重新获得UTF-8字符

function decode_utf8(s) { 
  return decodeURIComponent(escape(s)); 
}
例如:
var new_Str=decode_utf8(Str)

f如果要使用$.getJSON(),可以在调用之前添加以下内容:

$.ajaxSetup({
    scriptCharset: "utf-8",
    contentType: "application/json; charset=utf-8"
});
$.ajaxSetup({
    scriptCharset: "utf-8",
    contentType: "application/json; charset=utf-8"
});

嗨,帕特,我在用getJSON方法设置内容类型时遇到了同样的问题。就在调用getJSON之前,我使用了$.ajaxSetup,但没有发生任何变化,“nordic”字符在我的数据库中变成了垃圾字符。你能告诉我打电话给mathods的确切顺序吗?thnx根据答案,为
application/json
指定字符集是非法的。我在post中遇到了类似的问题,使用了$.ajax(…)调用而不是$.post(…),因为我没有办法更改内容类型。这允许我使用缩写的$.post符号来匹配我正在使用的$.get。我认为这应该是可以接受的答案,因为它可以工作并允许使用$.getJSON()。我刚刚发现您在error方法中重写了XMLHttpRequest主机对象。这只是一个良好的编码实践问题,不要混淆其他开发人员;)我建议将其重命名为其他名称;)更好:)(事实上,我现在通常将其命名为与u相同:>)根据答案,为
application/json
指定字符集是非法的。根据答案,为
application/json
指定字符集是非法的。非法吗?我希望我不会因为尝试而被捕……对不起,你的答案与@Pat 11年前的答案有何不同?