2013-05-08 57 views
0
欧洲字符

我已下拉定义为dojoType="dijit.form.Select" id="MyDropdown"道场dijit.form.Select腐败在Firefox

我从JSON数组加载它如下

dojo.xhrGet({ 
     url: "getOptions", 
     handleAs: "json", 
     preventCache : true, 
     timeout : 50000, 
     load : function(data, ioargs) { 
       var options = data.options; 
       myStore.data = options 
       dijit.byId("MyDropdown").setStore("myStore") 
       ... 

其中MyStore = new dojo.data.ItemFileReadStore({})

这是我的JSON来自服务器:

{"options":{"items":[...,{"name":"Crédit","id":57},...]}} 

当MyDrop down在Firefox中呈现字符é变成 。它可以在IE9和Chrome 26中正常工作。

还有一点奇怪的是,在Firefox中使用dojox.grid.DataGrid正确地呈现相同的字符。

另外,如果我只是通过把getOptions地址加载到Firefox的JSON,然后JSON显示正确的字符。当检查Firebug中的dojo.xhrGet()的结果时,我看到了与损坏的字符相同的JSON。所以看起来dojo.xhrGet()正在造成腐败。但是为什么它使用DataGrid正确显示,这也是使用dojo.xhrGet()加载的?

回答

0

这可能是因为它混合了多个字符编码(例如UTF-8和其他字符集)。我曾经遇到类似的问题,Opera使用另一种编码,而不是我预期的编码。

要解决它,你应该检查几件事情。

您应验证getOptions URL是否使用propert标头发送数据。使用开发人员工具/ firebug(通常是F12)来验证哪些头文件被发送以及什么是Content-type

然后,您应该验证当前页面是否也使用相同的字符集编码。我认为如果XHR请求没有告诉他们应该使用哪个字符集,一些浏览器将使用它们的默认值。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

您可以尝试执行你的XHR调用的字符集与下列财产:你应该通过检查<header>标签类似这样的东西检查头(类似我以前的步骤)做到这一点:

headers: { "Content-Type": "application/json; charset=utf-8" },