2013-05-08 61 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" },