2015-03-18 83 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。

相關問題