2014-08-27 51 views
1

无法理解此代码总是在控制台"Error!"中打印的原因。Ajax请求不适用于Spring控制器

这里是我的春天控制器

@RequestMapping("/spinner") 
public class SpinnerController { 

    @RequestMapping(method = RequestMethod.GET, 
        produces = "application/json") 
    public @ResponseBody String spinner() throws InterruptedException { 
     Thread.sleep(10); 
     return "answer"; 
    } 
} 

而我的JS脚本:

function sendRequest() { 
    $.ajax({ 
      url: '/spinner', 
      type: 'get', 
      contentType: "application/json", 
      success: function (resp) { 
       alert("Yeah!"); 
       console.log(resp); 
      }, 
      error: function(){ 
       console.log("Error!"); 
      } 
     } 
    ); 
} 

和JSP页面:

<html> 
<head> 
    <link type="text/css" rel="stylesheet" href="../resources/css/style.css"/> 
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.5.0/pure-min.css"> 
    <script type="text/javascript" charset="utf-8" src="../resources/js/jquery.js"></script> 
    <script type="text/javascript" charset="utf-8" src="../resources/js/send.js"></script> 
</head> 
<body> 
    <button class="pure-button pure-button-primary" onclick="sendRequest()">Press me!</button> 
    <div id="spinner">Greeting!</div> 
</body> 
</html> 

任何想法,为什么我得到一个错误?

UPD

这里是日志脚本的方法错误

error: function (jqXHR, textStatus, errorThrown) { 
    console.log(jqXHR); 
    console.log(textStatus); 
    console.log(errorThrown); 
} 

控制台输出:

[object Object] send.js:14 
parsererror send.js:15 
SyntaxError: Unexpected token a 

UPD2

与添加这个固定代码:

@RequestMapping(method = RequestMethod.GET, 
       produces = "application/json") 
public @ResponseBody Answer spinner() throws InterruptedException { 
    Thread.sleep(10); 
    return new Answer("info"); 
} 

public class Answer {  
    private String data; 

    public Answer(String data) { 
     this.data = data; 
    } 

    public Answer() { 
    } 

    public String getData() { 
     return data; 
    } 

    public void setData(String data) { 
     this.data = data; 
    } 
} 
+0

控制台“错误!” - 在哪里?在浏览器控制台或服务器控 – Abhi 2014-08-27 22:18:43

+0

传递给$ .ajax()的'error'函数接收3个参数:(jqXHR jqXHR,String textStatus,String errorThrown)。尝试添加并检查其值 – Twicetimes 2014-08-27 22:24:13

+0

@Abhi在浏览器中。 – barbara 2014-08-27 22:26:14

回答

2

JQuery在默认情况下试图猜测使用MIME类型的XHR响应中会发生什么类型的数据。 Spring返回的数据与您发送的MIME类型不匹配。你可以改变你的后端方法:

@RequestMapping("/spinner") 
public class SpinnerController { 

@RequestMapping(method = RequestMethod.GET, 
       produces = "application/json") 
public @ResponseBody String spinner() throws InterruptedException { 
    Thread.sleep(10); 
    return "[{\"answer\":1}]"; 
} 
} 

您还可以强制jQuery的不考虑MIME类型(不是一个好主意),并在您的Ajax对象设置dataType : 'text'

+0

是的,这是一个很好的解决方案。 – barbara 2014-08-27 22:52:30

相关问题