(java)jsp页面ajax发出请求返回json格式数据 中文乱码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(java)jsp页面ajax发出请求返回json格式数据 中文乱码问题相关的知识,希望对你有一定的参考价值。

后台代码:
Map<String, String> items = new HashMap<String,String>();
items.put("name", "李连杰");
items.put("sex", "男");
JSONObject jo = JSONObject.fromObject(items);
try
PrintWriter out = response.getWriter();
response.setContentType("text/json; charset=UTF-8");
out.write(jo.toString());
out.flush();
out.close();
catch (IOException e)
e.printStackTrace();

前台代码:
$.ajax(
type : "post",
url : "salary/queryFormulaValueById.action",
data : "formulaID=" + formula,
dataType:"json",
success : function(items)
alert(items.name);
,
beforeSend : function()
$("#formulamsg").html("查询中...");
,
error : function(XMLHttpRequest, textStatus, errorThrown)
alert("内部错误,请重新操作!");

);
页面头信息:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

success函数里面得到的items.name老是乱码(全是问号),实在无法解决,哪位大神能解决?不胜感激!!

你如果没有使用编码集过滤器,
就需要手动设置response的编码集
response.setCharacterEncoding("UTF-8");
这句话要放在这个方法的最前面,就是设置返回头的前面
如果页面传入的参数,在获取时乱码,则需要
request.setCharacterEncoding("UTF-8");
参考技术A setContentType要放在PrintWrite前面,你颠倒了 参考技术B 加个
$.ajax(
contentType : "application/json",);本回答被提问者采纳
参考技术C response.setContentType()语句放在hashMap前面试试看

如何使用一个ajax请求从java servlet返回多个json对象

【中文标题】如何使用一个ajax请求从java servlet返回多个json对象【英文标题】:how to return multiple json objects from java servlet using one ajax request 【发布时间】:2011-08-20 21:16:02 【问题描述】:

我正在使用 jsp 和 servlet 构建 Web 应用程序,我从 jsp 发送 ajax 请求,我想从 servlet 返回两个 json 对象。我尝试执行以下操作,但代码不起作用。

//在jquery中我写了这段代码

        var id = $(this).attr('id');

        var paramenters = "param":id;

        $.getJSON("MyServlet", paramenters, function (data1,data2)

            $("h3#name").text(data1["name"]);

            $("span#level").text(data1["level"]);

            $("span#college").text(data2["college"]);

            $("span#department").text(data2["department"]);

        );

//在servlet中我写了这段代码

    String json1 = new Gson().toJson(object1);

    String json2 = new Gson().toJson(object2);

    response.setContentType("application/json");

    response.setCharacterEncoding("utf-8");

    response.getWriter().write(json1);

    response.getWriter().write(json2);

谁能帮帮我???

【问题讨论】:

【参考方案1】:

你应该这样做:

服务器端:

String json1 = new Gson().toJson(object1); 
String json2 = new Gson().toJson(object2); 
response.setContentType("application/json"); 
response.setCharacterEncoding("utf-8"); 
String bothJson = "["+json1+","+json2+"]"; //Put both objects in an array of 2 elements
response.getWriter().write(bothJson);

客户端:

$.getJSON("MyServlet", paramenters, function (data) 
   var data1=data[0], data2=data[1]; //We get both data1 and data2 from the array
   $("h3#name").text(data1["name"]); 
   $("span#level").text(data1["level"]); 
   $("span#college").text(data2["college"]); 
   $("span#department").text(data2["department"]);
);

希望这会有所帮助。干杯

【讨论】:

【参考方案2】:

将它们包装在 JSON 数组中:

[ .., .., ..]

或者,将它们包装在另一个对象中:

 "result1":.., "result2":.. 

【讨论】:

【参考方案3】:

您可以返回一个 JSON 数组,其中两个对象都作为数组的元素。让您的 servlet 返回具有如下结构的 JSON:

["name": "object1", "name": "object2"]

那么你的javascript代码可以是这样的:

$.getJSON("MyServlet", paramenters, function (data)
        var data1 = data[0];
        var data2 = data[1];

        $("h3#name").text(data1["name"]);

        $("span#level").text(data1["level"]);

        $("span#college").text(data2["college"]);

        $("span#department").text(data2["department"]);

    );

【讨论】:

【参考方案4】:

您将需要像这样将两者都放入一个 json 字符串中

response.getWriter().write("[");
response.getWriter().write(json1);
response.getWriter().write(",");
response.getWriter().write(json2);
response.getWriter().write("]");

这会将它们放入一个 json 数组中

你也可以把它们放在一个 json 对象中

response.getWriter().write("\"object1\":");
response.getWriter().write(json1);
response.getWriter().write(",\"object2\":");
response.getWriter().write(json2);
response.getWriter().write("");

【讨论】:

【参考方案5】:

@Edgar 的回答对我有用。但我认为我们应该避免自己形成数组,所以我建议使用列表。代码将是这样的:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
    ...
    resp.setContentType("application/json");
    resp.setCharacterEncoding("utf-8");
    ArrayList<Object> obj_arr = new ArrayList<Object>();
    obj_arr.add(obj1);
    obj_arr.add(obj2);
    Gson gson = new Gson();
    String tmp = gson.toJson(obj_arr);
    resp.getWriter().write(tmp);

而在前端,对于我们得到的数据,我们可以使用data[0]来检索obj1data[1]来检索obj2。代码将是这样的(我在这里使用 ajax):

$('#facts_form').submit(function (e) 
    e.preventDefault();
    var data = new FormData(this);
    var url = 'import';
    $.ajax(
        url: url,
        type: "POST",
        data: data,
        processData: false,  
        contentType: false,   
        async: false,
        cache: false,
        success: function (data)                 
            for (var i = 1; i < data.length; i++)
               //do whatever 
            
        ,
        error: function (xhr, status, error) 
            alert(status + "\n" + error);
        
    );
);

【讨论】:

以上是关于(java)jsp页面ajax发出请求返回json格式数据 中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

struts2中,jsp页面通过ajax访问了action,action如何返回一个json数据给这个jsp页面,

如何使用一个ajax请求从java servlet返回多个json对象

springmvc通过ajax异步请求返回json格式数据

jsp中,用ajax获取数据

java后台的json值怎么传给jsp页面,并进行遍历

ajax登录请求成功返回json数据跳转另一页面,在另一页面怎么取值?拜谢,不胜感激!