Maison  >  Article  >  interface Web  >  Que dois-je faire si la valeur de retour ajax de jquery est un code chinois tronqué ?

Que dois-je faire si la valeur de retour ajax de jquery est un code chinois tronqué ?

coldplay.xixi
coldplay.xixioriginal
2020-12-24 14:27:362551parcourir

La solution au problème selon lequel la valeur de retour ajax de jquery est un code chinois tronqué : 1. [PrintWriter out = réponse.getWriter()] est placé après le code correct correspondant ; 2. jquery ajoute le paramètre [ ; type de contenu].

Que dois-je faire si la valeur de retour ajax de jquery est un code chinois tronqué ?

L'environnement d'exploitation de ce tutoriel : système windows7, version jquery3.2.1, ordinateur DELL G3.

Recommandé : Tutoriel vidéo jquery

La solution au problème selon lequel la valeur de retour ajax de jquery est le chinois code tronqué :

En utilisant l'ajax de jquery, j'ai rencontré un problème. Les données obtenues à partir de la base de données côté serveur n'avaient pas de caractères chinois tronqués (les journaux ont été tapés sans caractères tronqués), mais quand. il a été transmis de manière asynchrone au client, des caractères tronqués apparaissent. Le côté serveur a été codé (codage UTF-8). Au début, j'ai toujours soupçonné qu'il s'agissait d'un problème côté client. Par exemple, le codage entre le côté client et le côté serveur était incohérent. Je soupçonnais également que la fonction de l'outil AJAX de JQuery manquait contentType: "application/x-www-form-urlencoded; charset=utf-8", etc.

Le résultat était non, j'ai lutté pendant quelques heures, et j'ai découvert plus tard que le code était toujours côté serveur, et c'était un oubli.

Code côté serveur :

/**
* 异步(返回json数据格式)(支持分页)
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws AppException
*/
public ActionForward queryErrorCodeRecordByPage(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
Integer currentpage = Integer.parseInt(request.getParameter("currentpage")) ;
Integer pagesize = Integer.parseInt(request.getParameter("pagesize")) ;
try 
{
List ListByPage = this.errorCodeRecordFacade.queryErrorCodeRecordByPage(currentpage, pagesize);
JSONArray json = JSONArray.fromObject(ListByPage);
System.out.println("JSONArray数据---" + json.toString() );
request.setCharacterEncoding("utf-8");  //这里不设置编码会有乱码
        response.setContentType("text/html;charset=utf-8");
        response.setHeader("Cache-Control", "no-cache");  
PrintWriter out = response.getWriter();  //输出中文,这一句一定要放到response.setContentType("text/html;charset=utf-8"),  response.setHeader("Cache-Control", "no-cache")后面,否则中文返回到页面是乱码  
out.print(json.toString());
out.flush();
out.close();
} 
catch (Exception e) {
log.error("查询数据出错", e);
}
return null ;
}

Code côté client :

//异步 根据分页来取错误码历史 数据
function search_errorCodeRecord(currentpage,pagesize)
  {
       $.ajax({
          async :true,
  url: "<%=request.getContextPath()%>/errorCodeRecord/queryErrorCodeRecordByPage.do",
  type: "post",
  data: { currentpage: currentpage, pagesize:pagesize},  
//  dataType : "json", //这里已经定义数据格式
      contentType: "application/x-www-form-urlencoded; charset=utf-8", 
  success:function(data) {
          alert(data);
  //  var json=eval(&#39;(&#39;+data+&#39;)&#39;);   // jquery调用时会检测到,从而直接把返回格式当做json处理,所以再转化会报错。
    var json=eval(data);
   resolv_json(json) ;
   }
});
     }
 
 
 //解析json数组,动态拼接到白色Div中
 function resolv_json(json)
 {
    for(var i=0;i<json.length;i++)
    {
      //  alert(json[i].boss_resultinfo);
      
      var operate_state = "新增了" ;
      if(json[i].operate_state  == "2" )
      {
operate_state= "修改了"  ;
      }
      if(json[i].operate_state  == "3" )
      {
operate_state= "删除了"  ;
      }
      var p=$("<p></p>");
      var span1=$("<span></span>");
      var span2=$("<span></span>");
      var span3=$("<span></span>");
      var span4=$("<span></span>");
      
      var times = json[i].operate_time.time;
    //  alert(json[i].operate_time.time); //时间格式是个JSON对象
//  alert(getLocalTime(times));
      span1.html(getLocalTime(times));
      span2.html(json[i].operate_people);
      span3.html(operate_state);
      span4.html(json[i].businessname +" 错误码");
      
      p.append(span1).append(span2).append(span3).append(span4);
      $("#whiteDiv").append(p);
    }
 
 }
 
//时间戳转化为时间
function getLocalTime(nS) {
    return new Date(parseInt(nS)).toLocaleString().replace(/:\d{1,2}$/,&#39; &#39;);
}
 
 
<div  id="whiteDiv">
 
</div>

Le résumé est le suivant :

1. PrintWriter out = response.getWriter(); doit être placé après l'encodage

request.setCharacterEncoding("utf-8");  response.setContentType("text/html;charset=utf-8");

(la raison est très simple, vous savez.)

2. content-type vers jquery Les paramètres ne sont pas affectés.

contentType: "application/x-www-form-urlencoded; charset=utf-8",

Recommandations d'apprentissage gratuites associées : javascript(vidéo)

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