2

我正在尝试对我设置的 spring REST 服务进行简单的 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 调用时,我收到错误“错误:[object Object]”。

但是,我知道我的控制器设置正确,因为我可以使用RESTClient Firefox 插件访问我的服务并获得响应,所以我认为问题在于我如何处理 jQuery 调用,但这是我第一次尝试使用 jQuery,所以我不知道它有什么问题。

4

4 回答 4

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);
    });
}
于 2012-12-28T01:33:52.730 回答
2
$('#ajax').val(response);

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

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

这就是为什么loadAjax不起作用。getAjax不起作用,因为正如其他人指出的那样,您的响应不是有效的 json,因此 getJSON 将不起作用。

于 2012-12-28T03:19:58.803 回答
2

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

$.getJSON('http://localhost:8080/song-player/ajax', function(data) {
    alert('Ajax data' + JSON.stringify(data));
});
于 2012-12-28T02:47:42.520 回答
1

除了其他人指出的有关 malfomred json 的内容外,我的问题似乎源于试图使用JSONP调用我的服务。

我最终修改了控制器以遵循此博客文章,以使用回调参数包装我的响应。

我还将我的 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);
        });
    }

感谢所有的帮助。

于 2012-12-28T14:51:52.880 回答