2016-11-13 2 views
0

Ich möchte in der Lage sein, den in der Textbox eingegebenen Wert per Mausklick an meinen AJAX-Controller zu übergeben.Passing PathVariable an AJAX-Controller

Controller-Code:

@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); 
    } 
} 

Relevante Ansicht Code:

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

// ... 

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

So funktioniert das nicht, wenn die Schaltfläche geklickt wird, geschieht nichts. Allerdings, wenn ich in meinem Controller zu @RequestParam ändern, funktioniert es, aber ich will es mit @PathVariable arbeiten, so dass die URL für die richtige username angezeigt wird.

Wo ist das Problem, wie soll ich das beheben?

Antwort

0

Das klingt so, weil Sie die GET-Methode verwenden, um Ihre HTTP-Anfrage zu übergeben, der Parameter (Name) wird über eine Abfrage-Zeichenfolge übergeben.

Deshalb funktioniert @RequestParam funktioniert und @PathVariable nicht.

Wenn Sie es mit GET-Methode tun müssen, dann versuchen Sie, Ihre URL zu erstellen, wie folgt:

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

und Daten nicht mit Ihrem Ajax-Request passieren.

Versuchen Sie, mit Firebug oder Google Developer Tools zu arbeiten, um zu sehen, welche Daten zum Server und zurück zum Browser gehen.

etwas wie folgt aus:

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

_ „und geben Daten nicht mit Ihren Ajax-Request“ _ Was meinen Sie damit? – zeroflagL

+0

es bedeutet, verwenden Sie keine Daten: in Ihrem jquery Ajax Anruf. in Ihrem Fall nicht übergeben {name: $ ('# username'). val()} –

Verwandte Themen