1

我在 JSP 中使用 ajax post,将 json 数据发送到 servlet java 类。在 servlet 控制器类中,我使用 getparameter 来获取从调用 JSP 发送的数据。

到目前为止,这一切都很好。然后我开始处理来自这个 servlet 类的数据,并且我需要制定一个数据响应以发送回调用 JSP。

有没有办法可以将数据保存在 servelt 类中的变量中,并作为成功函数的一部分(在我的 AJAX 帖子中)访问这些数据?

我的 AJAX 邮政编码:

    $.ajax({ 
        type:        "POST", 
        url:           url, 
        dataType:  "text",  // [text, xml, json, script, text, html]
        data:       {postData : myData, sendURL : postUrl}, 
        success:    function(data, textStatus, jqXHR) { 
            alert('Success post to URL entered \n\n The data returned the following: ' + data);
        }, 
        error:function (xhr, ajaxOptions, thrownError){ 
            alert('Error xhr : ' + xhr.status); 
            alert('Error thrown error: ' + thrownError); 
        }
        //complete: alert('complete')                   
    }); 

我的 Servlet 控制器代码:

    @RequestMapping("/postData")
    public String postData(Model model, HttpServletRequest request) throws Throwable{

        String postData = request.getParameter("postData");
        String sendURL= request.getParameter("sendURL");

        System.out.println(this.getClass() + " : postData   : " + postData);
        System.out.println(this.getClass() + " : gatewayURL : " + gatewayURL);

        /* Process data and formulate a response.... */

        String responseText = processedResponseText; // This processedResponseText was populated in the internal processing
        String responseCode = processedResponseCode; // This processedResponseCode was populated in the internal processing

        return "callingJSP";
    }

作为我的 AJAX Post - Success 函数的一部分,如何将这两个变量(responseText 和 responseCode)返回给调用 JSP?

非常感谢

4

2 回答 2

0

还..

成功将返回响应

success:    function(data, textStatus, jqXHR) { 
       alert('Success post to URL entered \n\n The data returned the following: ' + data);
    }, 

成功函数中不需要 XHR 和 textStatus 应该是这样的:

success:    function(response) { 
       alert('Success post to URL entered \n\n The data returned the following: ' + response.responseText);
    }, 
于 2012-07-10T11:11:37.393 回答
0

如果您知道传入数据的结构(您应该知道!),请创建一个可以将发布数据序列化为的对象(我假设 myData 是 json?...如果不是,它应该是!)由小服务程序。spring 框架提供了 @RequestBody 注解来将传入的 json 反序列化为你的对象。当 servlet 需要响应时,请执行@Jigar 建议的操作:将您的响应包装在一个对象中。spring 框架提供了@ResponseBody 注解来序列化你对json 的响应。它可能看起来像这样:

你的js:

var myData = { postId: 1, comment: "this is great!" };
 $.ajax({ 
        type:        "POST", 
        url:           url, 
        dataType:  "text",  // [text, xml, json, script, text, html]
        data:       {postData : myData, sendURL : postUrl}, 
        success:    function(data, textStatus, jqXHR) {
            var jsonRepsonse = JSON.parse(data);
            alert('Success post to URL entered \n\n The data returned the following: ' + jsonRepsonse.responseText + ", " + jsonRepsonse.responseCode);
        }, 
        error:function (xhr, ajaxOptions, thrownError){ 
            alert('Error xhr : ' + xhr.status); 
            alert('Error thrown error: ' + thrownError); 
        }
        //complete: alert('complete')                   
    });

您的 Java 对象:

class Comment {
  private long postId;
  private String comment;
  // getters & setters
}

您包装的响应对象:

class AjaxResponse{
 private String responseText;
 private String responseCode;
 //other stuff
}

控制器中的处理函数:

 @RequestMapping("/postData")
 public @ResponseBody postData(Model model, 
             @RequestBody Comment comment,
             HttpServletRequest request) throws Throwable{

    String sendURL= request.getParameter("sendURL");

    System.out.println(this.getClass() + " : comment : " + comment.toString());

    /* Process data and formulate a response.... */

    AjaxResponse ajaxResponse = new AjaxResponse(processedResponseText, processedResponseCode);

    return ajaxResponse;
 }

理想情况下,您的 AjaxResponse 包含另一个对象而不是提供有关响应的更多信息的文本。例如,您可能希望按如下方式更改 AjaxResponse 对象:

class CommentResponse extends Comment {
   private long commentId;
   private Timestamp entryDateTime;
   // etc
}

class AjaxResponse{
 private CommentResponse commentResponse;
 private String responseCode;
 //other stuff
}

在前端收到响应时,这样做会极大地帮助您,但这取决于您的需要。

于 2012-07-10T18:50:46.420 回答