首頁 > 軟體

ajax回撥引數亂碼怎麼辦?

2019-12-12 06:12:07

      Ajax 即「Asynchronous Javascript And XML」(非同步 JavaScript 和 XML),是指一種建立互動式網頁應用的網頁開發技術。

      Ajax = 非同步 JavaScript 和 XML 或者是 HTML(標準通用標示語言的子集)。

      Ajax 是一種用於建立快速動態網頁的技術。

      Ajax 是一種在無需重新載入整個網頁的情況下,能夠更新部分網頁的技術。

      通過在後台與伺服器進行少量資料交換,Ajax 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。

傳統的網頁(不使用 Ajax)如果需要更新內容,必須過載整個網頁頁面。

1

第一步:問題定位。1、出現亂碼的原因一般都是由於編碼的不一致導致的。ajax請求接受字元編碼一般都為utf-82、在資料傳輸的過程中,前端get請求或post請求在經過Tomcat和java的一些框架時,都可能會出現編碼不一致的問題導致亂碼,亂碼一般都是中文。

2

第二步:問題重現。

1、我們重現的是比較原始的javaweb的servlet開發,status2和springmvc和其它框架原理基本都是一樣的。

2、程式碼實現

2.1 首先搭建一個javaweb專案

編寫servlet關鍵程式碼

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {

Map<String,Object> map = new HashMap<String,Object>();

   map.put("name", "張三");

   map.put("name2", "李四");

   map.put("name3", "網二");

   JSONObject json = new JSONObject(map);

PrintWriter out =  response.getWriter();

out.write(json.toString());

out.close();

}

2.2 web.xml設定

  <servlet>

  <servlet-name>servlet</servlet-name>

  <servlet-class>com.test.servlet.ServletController</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>servlet</servlet-name>

  <url-pattern>/servlet.do</url-pattern>

  </servlet-mapping>




3

第三步:重現亂碼測試。

1、開啟頁面。

2、單擊按鈕ajax

3、彈出內容亂碼,問題重現



4

第四步:問題解決。

1、解決的思想主要是通過接收資料,傳輸資料之前先使用utf-8編碼解決。

2、具體程式碼如下所示

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("application/json;charset=utf-8");

// setContentType與setCharacterEncoding的順序不能調換,否則還是無法解決中文亂碼的問題

response.setCharacterEncoding("UTF-8");

Map<String,Object> map = new HashMap<String,Object>();

   map.put("name", "張三");

   map.put("name2", "李四");

   map.put("name3", "網二");

   JSONObject json = new JSONObject(map);

PrintWriter out =  response.getWriter();

out.write(json.toString());

out.close();

}

3、測試。

3.1 開啟頁面,

3.2點選ajax按鈕如下圖所示。




IT145.com E-mail:sddin#qq.com