Ajax调用Spring MVC控制器重定向页面而不是返回值

时间:2015-03-18 21:07:09

标签: java ajax spring model-view-controller controller

我有点困惑。我正在写一个MVC应用程序,并有一个像这样的简单控制器:

@Controller
public class ProfileController {

final String DEFAULT_MALE_AVATAR = "../resources/graphics/avatarMan.PNG";
final String DEAULT_FEMALE_AVATAR = "../resources/graphics/avatarWoman.PNG";

@Autowired
UserService userService;

@RequestMapping(value = "/profile", method = RequestMethod.GET)
public String index() {

    return "user/profile";
}

@RequestMapping(value = "profile/getavatar", method = RequestMethod.GET)
public @ResponseBody String getLoggedUserAvatar() {

    String userMail = SecurityContextHolder.getContext()
            .getAuthentication().getName();

    User loggedUser;

    if (userMail != null) {
        loggedUser = userService.findUserByEmail(userMail);
        return loggedUser.getAvatar();
    } else {
        return DEFAULT_MALE_AVATAR;
    }
}

在输入/ profile部分时,我的body html标签中还有一个名为“onload”的简单js文件。

function init() {

var url = "profile/getavatar";

$.ajax({
    url : url
}).then(function(data) {
    avatarLink = data;
    loadAvatar(avatarLink);
});

function loadAvatar(avatarLink){
    $("#userAvatar").attr("src", avatarLink);
}

}

由于一些奇怪的原因,我被驱逐到“profile / getavatar”,页面包含带有getLoggedUserAvatar()返回值的文本。有趣的是,我还有一些其他控制器,其他部分使用几乎相同的js文件和控制器 - 它们就像一个魅力。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

我希望当您直接点击网址时,您会得到预期的响应。如果没有发生,那么还有其他问题。如果您在浏览器中直接点击网址时得到正确的响应,请在执行ajax调用时尝试执行以下操作。它传递了期望从服务器返回的内容类型。

function init() {

var url = "profile/getavatar";

$.ajax({
    url : url,
    dataType: "json"
}).then(function(data) {
    avatarLink = data;
    loadAvatar(avatarLink);
});

function loadAvatar(avatarLink){
    $("#userAvatar").attr("src", avatarLink);
}

}

答案 1 :(得分:0)

如果您使用的是spring 4,请确保您的依赖库中有Jakson jar。框架将自动将内容协商器作为JSON获取,并在后台找到Jakson jar以将JSON传输到服务器并从服务器获取JSON数据

使用JAXB jar,以防您需要将XML作为内容协商者处理。