2015-03-18 40 views
0

我有点困惑。我正在写一个MVC应用程序,有一个简单的控制器是这样的:Ajax调用Spring 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; 
    } 
} 

我也在我的身体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); 
} 

} 

而对于一些奇怪的原因,我得到ridirected为“个人资料/ getavatar”和页面包含()的返回getLoggedUserAvatar价值的文本。有趣的是我也有其他控制器的其他控制器几乎相同的JS文件和控制器 - 他们的工作就像一个魅力。

我错过了什么?

+0

让我知道它是否有帮助? – minion 2015-03-20 01:50:17

回答

0

我希望当你直接点击URL时,你会得到预期的回应。如果这没有发生,那么还有其他问题。如果您在浏览器中直接点击url时得到了正确的回应,那么在进行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); 
} 

} 
+0

当我直接点击URL时,我得到了预期的回应。当我添加dataType:json时,控制台尖叫“json没有定义”。任何想法? – 2015-03-19 06:28:30

+0

你能发布实际的错误堆栈吗? – minion 2015-03-19 12:09:26

+0

我编辑的代码包装在引号,所以js不认为这是变量。 – minion 2015-03-19 13:45:32

0

如果您使用spring 4,请确保您的依赖库中有Jakson jar。框架会自动地将内容谈判器接收为JSON,并将在后台找到用于将JSON传输到服务器并从服务器获取JSON数据的JSON数据。如果需要将XML作为内容谈判器处理,则使用JAXB jars。

相关问题