java - 从服务器发送简单错误响应消息来调用 jQuery ajax 方法(例如,responseText)的最佳方法是什么?

标签 java jquery ajax spring-mvc

我正在尝试做什么...

我想将响应消息发送回调用 jQuery AJAX 方法,然后我可以用它来创建警告弹出消息。

我尝试使用 HttpServletResponse 方法:

   sendError(int sc, java.lang.String msg)

问题...

不幸的是,此方法将 "msg" 字符串值包装在较大的 HTML 字符串中 - 即显然旨在用作独立错误页面的内容。

--我希望只获取消息字符串本身(即使用 jquery 对象方法 - 例如“jqXHR”)。

我应该如何最好地实现这一点? (即,在没有 HTML“包装器”的情况下将消息返回到成功/失败方法)

...java 服务器片段...

    -
    -
    -
        private List<MyDTO> performSearch(HttpSession session, HttpServletResponse resp)
        {
            try
            {
                // (code to inspect searchString, etc.)
                //...forcing error for this test...
                throw new Exception("bad request yaddah...yaddah...yaddah...");
            }
            catch (Exception e)
            {
                try
                {
                    resp.sendError(HttpServletResponse.SC_NOT_FOUND, e.getMessage());
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }

            return null;
        }
    -
    -
    -

...JQuery 客户端代码段...

    -
    -
    -
                $.ajax({
                    type: "POST",
                    url: searchurl,                            
                    data: "searchString=" + searchString,
                    async: true,
                    success: function(jqXHR) {
                        alert("success");
                    },
                    error: function(jqXHR) {
                        alert("Error - bad search string used:" + jqXHR.responseText);
                    }
                });  
    -
    -
    -
<小时/>

注意: 执行如下操作,似乎工作正常,但是,我想知道是否有更好的方法将简单的消息字符串发送回ajax 调用...

    -
    -
    -       
        private List<MyDTO> performSearch(HttpSession session, HttpServletResponse resp)
        {
            try
            {
                // (inspect searchString, etc.)
                //...forcing error for this test...
                throw new Exception("bad request yaddah...yaddah...yaddah...");
            }
            catch (Exception e)
            {
                try
                {
                    resp.setStatus(HttpServletResponse.SC_NOT_ACCEPTABLE);
                    resp.getWriter().write(e.getMessage());
                    resp.flushBuffer();
                }
                catch (Exception ex)
                {
                    e.printStackTrace();
                }
            }

            return null;
        }       
    -
    -
    -

完成我想做的事情的最简单/最好的方法是什么?

感谢您的帮助!!!

最佳答案

我不知道三年后你是否还需要答案,但我正在做一个项目,需要做同样的事情。我用ResponseEntity作为我的 Controller 中方法的返回类型。它有一个 HttpStatus 代码(它将触发来自 jQuery/AJAX 的成功/错误函数)和一个主体(没有包装器)。您可以像这样重写 Controller 方法:

Controller

private ResponseEntity performSearch(HttpSession session)
    {
        try
        {
            // (inspect searchString, etc.)
            //...forcing error for this test...
            throw new Exception("bad request yaddah...yaddah...yaddah...");
        }
        catch (Exception e)
        {
            return new ResponseEntity(e.getMessage, HttpStatus.BAD_REQUEST);
        }

        return null;
    }       

jQuery/AJAX

你的代码没问题,调用 jqXHR.responseText() 即可。另外,成功函数的签名是 (data, textStatus, jqXHR) (jqXHR 排在第三,而不是第一)。

响应实体

ResponseEntity 可以通过多种方式返回:

//Equivalent
return new ResponseEntity(someString, HttpStatus.OK);
return ResponseEntity.ok(someString);
return ResponseEntity.ok().body(someString);

ResponseEntity 使用泛型,例如 ResponseEntity<T> 。因此,如果您的方法返回 List,您可以使用 private ReponseEntity<List<MyDTO>> .

希望这仍然对您有帮助。

关于java - 从服务器发送简单错误响应消息来调用 jQuery ajax 方法(例如,responseText)的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157562/

相关文章:

javascript - setinterval() 函数需要重新设置

JQuery/CSS - 分段控件

php - 使用 AJAX post 从 MySQL 加载滚动内容

java - 计算使用java中的Random()方法生成的数字的平均值

java - PreBuiltTransportClient 写入消息 : ERROR StatusLogger No log4j2 configuration file found

java - Thread.sleep 阻塞其他线程

javascript - 使用ajax在一页上发送多个表单数据

java - Android Java 日历替代品,具有以下功能

javascript - 单击按钮添加到 field_tag rails jQuery

php - 使用 ajax 为 WooCommerce 产品创建过滤器选择器