Maison >interface Web >js tutoriel >Que dois-je faire si les caractères chinois des données sont tronqués lorsque Ajax charge les données JSON ?

Que dois-je faire si les caractères chinois des données sont tronqués lorsque Ajax charge les données JSON ?

php中世界最好的语言
php中世界最好的语言original
2018-03-30 17:41:141670parcourir

Cette fois, je vais vous montrer comment gérer les caractères chinois tronqués dans les données lorsque Ajax charge des données JSon. Quelles sont les précautions pour résoudre le problème des caractères chinois tronqués dans les données lorsque Ajax charge JSon. data Ce qui suit est un cas pratique, jetons un coup d'œil ensemble.

1. Description du problème

Lors de l'utilisation de l'actualisation asynchrone du menu parent par zTree, le serveur renvoie des caractères chinois tronqués, mais SpringMvc est utilisé dans le projet. Les caractères chinois tronqués ont été traités, pourquoi apparaissent-ils encore ?

Voici la configuration de la requête asynchrone :

Code Java

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

Traitement des caractères chinois SpringMvc :

Code 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>

Les résultats renvoyés contiennent des caractères chinois tronqués :

Code 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" 
  } 
]

Solution

Après. Après enquête, il a été constaté qu'il manquait un type dans les types de médias pris en charge par le traitement des caractères chinois SpringMvc.

À en juger par la requête envoyée par le navigateur :

L'actualisation asynchrone utilise la demande de publication, mais lorsqu'elle est renvoyée par le serveur, le type de contenu est : text/plain ;charset=ISO-8859-1

charset est ISO-8859-1, pas UTF-8, et les caractères chinois tronqués traités par SpringMvc ne contiennent pas ce type, donc des caractères chinois tronqués sont provoqués.

La solution finale consiste donc à ajouter le type text/plain au traitement chinois SpringMvc, comme suit :

Code Java

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

Les détails sont les suivants :

Java Code

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

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Ajax+Servlet pour implémenter un lien déroulant sans actualisation (avec code)

ajax pour obtenir des données json Comment utiliser

pour undéfini

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn