如何解决ajax成功中的“数据未定义”问题?

我有一个 JSP 页面,其中我有一个按钮 onclick,我正在调用一个名为“sendmail()”的 Ajax 方法。发送邮件 API 写在控制器中。我试图在 Ajax 成功中显示一条警报消息使用 data.message 并表示数据未定义。


我尝试将控制器中的响应对象设置为成功,并将其作为字符串返回。注意:要做到这一点,我必须将我的控制器 sendmail 方法更改为 String 返回类型。所以我观察到在这种情况下 Ajax 调用不会进入成功方法。当方法类型为 void 时它工作正常。当我在 chrome 开发人员的帮助下检查,网络调用返回 404(未找到)。邮件已成功发送,但 ajax 成功不起作用。


这是我的按钮和 Ajax 方法,


<div class="uk-width-large-2-5">


  <div class="uk-form-row">

  <label>Message</label>

  <textarea id="message" cols="30" rows="4" class="md-input"></textarea>

  </div>

  <div class="uk-form-row">

  <button type="submit" class="md-btn md-btn-success md-btn-large" onclick="sendMail()">Send Message</button>

 </div>

 </div>

阿贾克斯方法:


<script>

function sendMail() {

 var reqJson = {};

 reqJson.msg = $("#message").val();



$.ajax({

type : "POST",

url : "sendMail",

data : JSON.stringify(reqJson),

dataType: 'json',

contentType: "application/json",

  success : function(data) {    

  console.log("data :"+data.message);

               }

 error: function()

 {

}

    });                                 

}

</script>

主控制器.java


 @RequestMapping(value = "/sendMail", method = RequestMethod.POST, produces = "application/json")

   public void sendContact(HttpServletRequest request, HttpServletResponse response, @RequestBody String payload) {

        JSONObject jRespObj = new JSONObject();


      try {

        System.out.println("Welcome");

        JSONObject jPayload = new JSONObject(payload);

         System.out.println("jobj : "+jPayload);

         String message = jPayload.getString("msg");

         InputStream inputStream = UserController.class.getResourceAsStream("/Contactusrequest.htm");

      StringWriter writer = new StringWriter();

      try {

          IOUtils.copy(inputStream, writer);

         } catch (IOException e) {

          e.printStackTrace();

         }

我想从控制器获取响应对象到 Ajax 成功,以访问 data.message。


精慕HU
浏览 1081回答 2
2回答

幕布斯7119047

解决方案 1.您正在返回响应,因此在 Ajax 中获取数据是未定义错误。 使用 Gson 或 JSONObject 在正文中写入 json 响应,而不是返回。例如。//Write the json response in body&nbsp; //return jRespObj.toString();&nbsp; response.getWriter().write(jRespObj.toString());解决方案 2 - 删除所有其他 System.out.println 语句并在 json 中显示单个响应。System.out.print(jRespObj.toString());在 ajax 中,你可以得到类似的响应$ajax({----success : function(data) {&nbsp; &nbsp;&nbsp;&nbsp; console.log("data :"+data['message']);},&nbsp;error: function()&nbsp;{}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript