>웹 프론트엔드 >JS 튜토리얼 >jquery의 ajax 반환 값이 중국어로 왜곡된 코드인 경우 어떻게 해야 하나요?

jquery의 ajax 반환 값이 중국어로 왜곡된 코드인 경우 어떻게 해야 하나요?

coldplay.xixi
coldplay.xixi원래의
2020-12-24 14:27:362617검색

jquery의 ajax 반환 값이 중국어로 왜곡된 코드인 문제에 대한 해결책: 1. [PrintWriter out = response.getWriter()]는 해당 올바른 코드 뒤에 배치됩니다. 2. jquery는 [content-type] 매개변수를 추가합니다. .

jquery의 ajax 반환 값이 중국어로 왜곡된 코드인 경우 어떻게 해야 하나요?

이 튜토리얼의 운영 환경: windows7 시스템, jquery3.2.1 버전, DELL G3 컴퓨터.

추천: jquery 비디오 튜토리얼

jquery의 ajax 반환 값이 중국어로 왜곡된 코드에 대한 솔루션:

jquery의 ajax를 사용하면서 서버 측 데이터베이스에서 검색된 데이터에 문제가 발생했습니다. 한자 깨짐 문제가 있는데(로그 입력시 깨짐 현상이 없음) 고객에게 비동기적으로 전송하면 깨짐 현상이 나타납니다. 서버 측이 인코딩되었습니다(UTF-8 인코딩). 처음에는 클라이언트측 문제인 줄 항상 의심했습니다. 예를 들어 클라이언트측과 서버측 코딩이 일치하지 않는 경우도 있었고 JQuery AJAX 도구 함수에 contentType: "application/x가 누락된 것도 있었습니다. -www-form-urlencoded; charset=utf.-8"contentType: "application/x-www-form-urlencoded; charset=utf-8",   等等问题。

结果都不是,纠结了几个小时,后来发现,原来代码还是出在服务器端,疏忽了。

服务器端代码:

/**
* 异步(返回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 ;
}

客户端的代码:

//异步 根据分页来取错误码历史 数据
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>

总结如下: 

1.  PrintWriter out = response.getWriter(); 一定要放在

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

编码的后面(原因很简单,你懂的。)

2.  jquery 加不加 content-type

결과는 둘 다 아니었고, 몇 시간 동안 고생했는데 나중에 알고 보니 코드가 아직 서버 측에 있었고, 그건 실수였습니다.

서버 측 코드:

contentType: "application/x-www-form-urlencoded; charset=utf-8",
클라이언트 측 코드: rrreee

요약은 다음과 같습니다.
🎜🎜1 PrintWriter out = response.getWriter();는 다음과 같습니다. 🎜 rrreee🎜 인코딩 뒤에 배치됩니다(이유는 매우 간단합니다.)🎜🎜2. jquery가 content-type 매개변수를 추가하는지 여부는 영향을 미치지 않습니다. 🎜rrreee🎜🎜🎜관련 무료 학습 권장 사항: 🎜🎜🎜javascript🎜🎜🎜(동영상) 🎜🎜🎜

위 내용은 jquery의 ajax 반환 값이 중국어로 왜곡된 코드인 경우 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.