ホームページ >ウェブフロントエンド >jsチュートリアル >Ajax が JSON データをロードするときにデータ内の漢字が文字化けする場合はどうすればよいですか?

Ajax が JSON データをロードするときにデータ内の漢字が文字化けする場合はどうすればよいですか?

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-30 17:41:141664ブラウズ

今回は、Ajax が JSon データをロードするときにデータに文字化けが発生する場合の対処方法を説明します。見てください。

1. 問題の説明 zTree の親メニューの非同期更新を使用すると、サーバーは中国語の文字化けを返しますが、プロジェクトでは SpringMvc が使用されており、中国語の文字化けは処理されているのになぜ表示されます。 ?

非同期リクエストの構成は次のとおりです:

Java コード

async: { 
  enable: true, 
  url: basePath + '/sysMenu/listSysMenu', 
  autoParam: ["id=parentId"] 
}

SpringMvc 漢字処理:

Java コード

<mvc:annotation-driven> 
  <mvc:message-converters> 
  <bean class="org.springframework.http.converter.StringHttpMessageConverter"> 
    <property name="supportedMediaTypes"> 
       <list> 
          <value>application/json;charset=UTF-8</value> 
      <value>text/html;charset=UTF-8</value> 
     </list> 
    </property> 
  </bean> 
 </mvc:message-converters> 
</mvc:annotation-driven>

返された結果には中国語の文字化けがあります:

Js コード

[ 
  { 
    "menuId": "880095098165986816", 
    "menuName": "????", 
    "parentId": "880095098165986815", 
    "menuUrl": "http://localhost:8080/imovie-manage/sysMenu/listSysMenuUI", 
    "menuIcon": "", 
    "menuSort": 1, 
    "isEnable": 1, 
    "parentMenuName": "??", 
    "id": "880095098165986816", 
    "name": "????", 
    "pId": "880095098165986815" 
  }, 
  { 
    "menuId": "880095098165986817", 
    "menuName": "???????", 
    "parentId": "880095098165986815", 
    "menuUrl": "http://localhost:8080/imovie-manage/sysMenu/treeSysMenuUI", 
    "menuIcon": "", 
    "menuSort": 1, 
    "isEnable": 1, 
    "parentMenuName": "??", 
    "id": "880095098165986817", 
    "name": "???????", 
    "pId": "880095098165986815" 
  } 
]

2. 調査の結果、SpringMvcの漢字処理のsupportedMediaTypesに1種類不足していることが判明しました。

ブラウザによって送信されたリクエストから判断すると:

非同期更新では

postリクエスト

が使用されますが、サーバーから返されたときのContent-Typeは次のとおりです: text/plain;charset=ISO-8859-1charsetはISOですUTF-8ではなく-8859-1であり、SpringMvcで処理する中国語文字化けにはこの型が含まれていないため、中国語文字化けが発生します。

最終的な解決策は、次のように SpringMvc の中国語処理に text/plain 型を追加することです:

Java コード

<value>text/plain;charset=UTF-8</value>

詳細は次のとおりです:

Java コード

 
   
    application/json;charset=UTF-8 
  text/html;charset=UTF-8 
  <value>text/plain;charset=UTF-8</value> 
   

これでメソッドはマスターできたと思います。この記事の事例を読んで、さらに興味深い内容については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

Ajax + サーブレットによるリフレッシュ不要のドロップダウンリンクの実装 (コード付き)


Ajax を使用して json データを未定義として取得する方法

以上がAjax が JSON データをロードするときにデータ内の漢字が文字化けする場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。