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
Javascript 具有特殊字符的DOJO xhrGet json_Javascript_Ajax_Utf 8_Dojo_Struts - Fatal编程技术网

Javascript 具有特殊字符的DOJO xhrGet json

Javascript 具有特殊字符的DOJO xhrGet json,javascript,ajax,utf-8,dojo,struts,Javascript,Ajax,Utf 8,Dojo,Struts,我使用dojo和struts 1.3.8,我想通过dojo.xhrGet将一些“特殊”字符,如è、°、传递给action struts saveBill。但是当我在它给我的动作中打印json时 è la prova n°10 我不知道问题出在哪里,我在所有jsp中都将所有内容类型设置为utf-8。。。我还使用了一个struts过滤器在utf-8中进行编码。。。没有什么我哪里错了? 这是javascript代码 var billJson = {"row":"0","descr":"è la

我使用dojo和struts 1.3.8,我想通过dojo.xhrGet将一些“特殊”字符,如è、°、传递给action struts saveBill。但是当我在它给我的动作中打印json时

è la prova n°10
我不知道问题出在哪里,我在所有jsp中都将所有内容类型设置为utf-8。。。我还使用了一个struts过滤器在utf-8中进行编码。。。没有什么我哪里错了? 这是javascript代码

var billJson = {"row":"0","descr":"è la prova n°10"};
dojo.xhrGet({
    url: "saveBill.do",
    headers: {'bill': billJson, 'Content-Type': 'application/json; charset=UTF-8'},
    handleAs: "text",
    load: function(response, ioArgs) {
            showMessage(response);
    },
    error: function(message, ioArgs) {
            showMessage(message);
    }
});
这是响应头(从Firebug复制粘贴)


谢谢

您需要对这些字符进行unicode转义:因此,您将使用\\u00E8而不是è


这里有一个参考资料:

在HTTP头中发送JSON是相当不标准的,我不推荐这样做。不在头中发送JSON的一个原因是,正如您所发现的,HTTP头只是字节;它们没有内在的代码页来将它们转换为字符串。我将改为在POST body中发送JSON数据;我想你的运气会好得多

但是,如果您必须在头中发送非ASCII JSON数据,则可以尝试调用ServletRequest.setCharacterEncoding(“UTF-8”)。我认为这只会影响URL参数和帖子正文的解析,但值得一试。正如Robot Woods建议的那样,您还可以将所有非ASCII字符编码为JSON(其中XXXX是字符UTF-16编码的十六进制表示)


但说真的,就把它放在帖子里;这是一个更强大、更好的解决方案。

您正在将数据传递到名为“bill”的标题字段中?为什么在传递JSON时使用handleAs=text?“文本”不会进行任何转义,因此您必须对非ASCII字符进行编码。您的服务器正在内容上声明utf-8,但您确定服务器上的内容实际上是以utf-8编码的(以匹配)?
Host    localhost:9080
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,**;q=0.8
Accept-Language it-it,it;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset  UTF-8,*
Keep-Alive  115
Connection  keep-alive
bill    {"row":"0","descr":"è la prova n°10"}
Content-Type    application/json; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer http://localhost:9080/CA3_S_001/login.do
Cookie  invoiceTreeSaveStateCookie=undefined%2C000001%2C000014; JSESSIONID=0000QeyArD4K7CDr_oyNkrpw9Zk:-1