2016-11-13 159 views
0

我希望能夠通過點擊鼠標將文本框中輸入的值傳遞給我的AJAX控制器。將PathVariable傳遞給AJAX控制器

控制器代碼:

@EnableWebMvc 
@Controller 
public class HelloWorldController { 

    public static class User { 

     private String name, surname; 
     int age; 

     public User(String name, String surname, int age) { 
      this.name = name; 
      this.surname = surname; 
      this.age = age; 
     } 

     public int getAge() { 
      return age; 
     } 

     public String getName() { 
      return name; 
     } 

     public String getSurname() { 
      return surname; 
     } 
    } 

    @RequestMapping("/hello") 
    public ModelAndView helloWorld() { 
     return new ModelAndView("home/hello.jsp", "message", "Spring MVC Demo"); 
    } 

    @RequestMapping(value = "/hello/{name}", produces = "application/json") 
    public @ResponseBody User getUser(@PathVariable(value = "name") String name) { 
     return new User(name, "Surname", 25); 
    } 
} 

相關視圖代碼:

 $.getJSON("hello/", {name: $('#username').val()} , function(obj) { 
          $("ul").append("<li>"+obj.name+"</li>"); 
         }); 

// ... 

    <input type="text" name="username" id="username" > 

所以這也不行,單擊該按鈕時,沒有任何反應。但是,當我在我的控制器中更改爲@RequestParam時,它可以正常工作,但我希望它與@PathVariable一起使用,以便顯示正確的username的URL。

問題在哪裏,我該如何解決這個問題?

回答

0

聽起來像這樣,因爲您使用GET方法來傳遞HTTP請求,參數(名稱)通過查詢字符串傳遞。

這就是爲什麼@RequestParam有效,而@PathVariable沒有。

如果你必須使用GET方法做,然後嘗試建立自己的網址如下:

/hello/" + $('#username').val() + "/" 

,不與您的Ajax請求傳遞數據。

嘗試使用螢火蟲或谷歌開發人員工具,以查看哪些數據將傳送到服務器並返回到瀏覽器。

類似的東西:

$.getJSON(/hello/" + $('#username').val() + "/", 
    function(obj) { 
     $("ul").append("<li>"+obj.name+"</li>"); 
}); 
+0

_「和不通過你的Ajax請求數據」 _你是什麼意思? – zeroflagL

+0

這意味着不要使用數據:在你的jQuery Ajax調用中。在你的情況下不要通過{name:$('#username')。val()} –