Heim  >  Artikel  >  Web-Frontend  >  Was soll ich tun, wenn der Ajax-Rückgabewert von jquery chinesischer verstümmelter Code ist?

Was soll ich tun, wenn der Ajax-Rückgabewert von jquery chinesischer verstümmelter Code ist?

coldplay.xixi
coldplay.xixiOriginal
2020-12-24 14:27:362555Durchsuche

Die Lösung für das Problem, dass der Ajax-Rückgabewert von jquery chinesischer verstümmelter Code ist: 1. [PrintWriter out = Response.getWriter()] wird nach dem entsprechenden korrekten Code platziert 2. jquery fügt den Parameter [content-type] hinzu; .

Was soll ich tun, wenn der Ajax-Rückgabewert von jquery chinesischer verstümmelter Code ist?

Die Betriebsumgebung dieses Tutorials: Windows7-System, JQuery3.2.1-Version, DELL G3-Computer.

Empfohlen: jquery-Video-Tutorial

Lösung für den Ajax-Rückgabewert von jquery, der chinesischer verstümmelter Code ist:

Bei der Verwendung von jquerys Ajax ist ein Problem aufgetreten. Die aus der Datenbank auf der Serverseite abgerufenen Daten sind nicht Es gibt ein Problem mit chinesischen verstümmelten Zeichen (es gibt keine verstümmelten Zeichen, wenn das Protokoll eingegeben wird), aber wenn es asynchron an den Kunden übertragen wird, erscheinen verstümmelte Zeichen. Die Serverseite wurde kodiert (UTF-8-Kodierung). Zuerst hatte ich immer den Verdacht, dass es sich um ein clientseitiges Problem handelte. Ich hatte beispielsweise auch den Verdacht, dass in der JQuery-AJAX-Toolfunktion contentType: „application/x“ fehlte -www-form-urlencoded; charset=utf. -8" usw. 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

Das Ergebnis war weder das eine noch das andere. Ich kämpfte mehrere Stunden lang und stellte später fest, dass sich der Code immer noch auf der Serverseite befand und es sich um ein Versehen handelte.

Serverseitiger Code:

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

Zusammenfassung wie folgt:
🎜🎜1. PrintWriter out = Response.getWriter(); muss sein platziert 🎜 rrreee🎜 Hinter der Codierung (der Grund ist sehr einfach, wissen Sie.)🎜🎜2 Ob jquery den Parameter content-type hinzufügt, hat keinen Einfluss darauf. 🎜rrreee🎜🎜🎜Verwandte kostenlose Lernempfehlungen: 🎜🎜🎜Javascript🎜🎜🎜 (Video) 🎜🎜🎜

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn der Ajax-Rückgabewert von jquery chinesischer verstümmelter Code ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn