2012-12-28 139 views
2

我正在尝试对我设置的弹簧REST服务进行简单的ajax调用。Ajax调用弹簧服务

我的控制器的定义如下:

@Controller 
public class SongPlayerController { 
    .... 
    @RequestMapping(value = { "/ajax", "/ajax/" }, method = RequestMethod.GET) 
    @ResponseBody 
    public String ajax() { 
     return "New Song URL"; 
    } 
} 

然后,我有一个Ajax请求一个简单的HTML页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<script type="text/javascript" src="jquery-1.8.3.js"></script> 
<title>Insert title here</title> 

<script type="text/javascript"> 
    function loadAjax() { 
     $.ajax({ 
      type : "GET", 
      url : "http://localhost:8080/song-player/ajax", 
      data : "text", 
      success : function(response) { 
       $('#ajax').val(response); 
      }, 
      error : function(e) { 
       alert('Error: ' + e); 
      } 
     }); 
    } 

    function getAjax() { 
     $.getJSON('http://localhost:8080/song-player/ajax', function(data) { 
      alert('Ajax data' + data); 
     }); 
    } 
</script> 
</head> 
<body> 
    <button type="button" onclick="loadAjax()">Ajax Call</button> 
    <div id="ajax">This will be an ajax call.</div> 
</body> 
</html> 

但是,无论使用$.ajax$.getJSON正在返回任何东西。当使用ajax调用时,我收到错误“Error:[object Object]”。

但是,我知道我的控制器安装正确,因为我可以打我的服务,并通过使用RESTClient Firefox add-on得到响应,所以我认为问题是如何处理jQuery调用,但这是我第一次尝试使用jQuery,所以我不知道它有什么问题。

回答

1

除了别人指出的有问题的json之外,似乎我的问题源自尝试打我的服务需要用JSONP调用。

我最终修改了控制器,遵循this blog post用回调参数包装我的回应。

我也改变了我的Ajax调用JSONP人口会:

function loadAjax() { 
     $.ajax({ 
      type : "GET", 
      url : "http://localhost:8080/song-player/ajax.json", 
      async : false, 
      dataType: "jsonp", 
      success : function(response) { 
          $('#ajax').text(response.streamUrl); 
       alert('Success: ' + response); 
      }, 
      error : function(e) { 
       alert('Error: ' + e); 
      } 
     }).done(function(data) { 
      console.log(data); 
      console.log(data.streamUrl); 
     }); 
    } 

感谢所有的帮助。

2

字符串文字"New Song URL"是无效的JSON。请返回此:

@Controller 
public class SongPlayerController { 
    @RequestMapping(value = { "/ajax", "/ajax/" }, method = RequestMethod.GET) 
    @ResponseBody 
    public String ajax() { 
     return "{\"url\":\"New Song URL\"}"; 
    } 
} 

然后按如下方式访问这个值:

function getAjax() { 
    $.getJSON('http://localhost:8080/song-player/ajax', function(data) { 
     alert('Ajax data' + data.url); 
    }); 
} 
2

你可以使用JSON-jsstringify()功能如下:

$.getJSON('http://localhost:8080/song-player/ajax', function(data) { 
    alert('Ajax data' + JSON.stringify(data)); 
}); 
+0

太糟糕'data'在这种情况下无效json – mkoryak

2
$('#ajax').val(response); 

不会工作。这是一个div。使用

$('#ajax').text(response); 

那就是为什么loadAjax不起作用。 getAjax不起作用,因为正如其他人指出的,你的回应是无效的JSON,所以getJSON将无法正常工作。