一尘不染

使用servlet返回json对象

jsp

我有一个servlet。它的工作方式是-我发送动作名称,servlet创建动作对象,执行某些任务,然后将字符串view作为结果返回-
我应该发送给用户的页面。Servlet doGET和for的工作原理相同doPost

    String name = getActionName(req);

    Action action = (Action) pico.getComponentInstance(name);

    String view = action.exec(req, resp);
    // router
    if (view.startsWith("redirect:")) {
        resp.sendRedirect(view.substring("redirect:".length(),
                view.length()));
    } else {
        getServletContext().getRequestDispatcher(
                "/" + view + ".jsp").forward(req, resp);
    }

我有AjaxAction,我从请求中获取值,从数据库中获取对象,将其转换为json字符串。但是如何从行动中恢复呢?操作返回字符串,表示应该将用户发送到的下一页。我将他发送到main页面。

    String requestId = req.getParameter("requestId");
    Long id = Long.valueOf(requestId);
    Request item = requestDao.read(id); 
    String json = "";
    json = new Gson().toJson(item);

    resp.setContentType("application/json");
    resp.setCharacterEncoding("UTF-8");
    try {
        resp.getWriter().write(json);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "main";

每当更改<select>(中的id = "re")值时,我都会发送JSON对象的请求。

   $("#re").change(function() {
        var $id = $('#re').val();
        $.get('AjaxAction.do', {
            requestId : $id
        }, function(respJSON) {
                            alert(respJSON);
            $.each(respJson, function(key, value) {
                $('#' + key).val(value);
            });
        });
    });

但是alert在#+键更改中既不出现也不显示值。因此,似乎功能无法正常工作。那么如何正确地从Action返回JSON对象呢?我调试器AjaxAction创建对象和return "main";


阅读 949

收藏
2020-06-10

共1个答案

一尘不染

  1. 更改return "main";return null;
  2. 之后,您将能够在同一页面上获得ajax响应和alert();
  3. 如果需要,您可以立即将用户重定向到另一个页面,而不是发出警报 document.location="anotherpage";
2020-06-10