2016-11-13 4 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に変更すると正しく動作しますが、のURLが表示されるように、@PathVariableと動作させます。

問題はどこにありますか。どのように修正する必要がありますか?

答えて

0

HTTPリクエストを渡すためにGETメソッドを使用しているため、パラメータ(name)がクエリ文字列で渡されるためです。

だから、@RequestParamが動作し、@PathVariableは動作しません。

GETメソッドでそれを行う必要がある場合は、次のようにURLを構築しよう:

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

をし、あなたのAJAX要求でデータを渡しません。

サーバーに送られるデータとブラウザに戻るデータを確認するには、FirebugまたはGoogle開発ツールを使用してください。そのような

何か:

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

_「と、あなたのAJAXリクエストでデータを渡さない」あなたは何を意味しますか_? – zeroflagL

+0

これは、jquery ajax呼び出しでデータを使用しないことを意味します。あなたのケースでは、{name:$( '#username')。val()}を渡さないでください。 –

関連する問題