2016-11-13 202 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()} –