2016-08-31 4 views
-1

Ich habe versucht, einen AJAX-Anruf an meinen Controller zu senden, dessen Code unten angezeigt wird. Jetzt das Problem, das ich gegenüberstelle, ist, dass, obwohl ich in der Lage bin, die Daten in der Steuerung abzurufen und anschließend zu verarbeiten, wird es nicht auf die JSP-Seite mit dem AJAX-Aufruf zurückgegeben.Ajax Anruf mit Spring MVC Controller

@SuppressWarnings("unchecked") 
@RequestMapping(value="/movie", method=RequestMethod.GET) 
public @ResponseBody Person search(HttpServletRequest request, HttpServletResponse response) throws IOException{   
    String name = request.getParameter("uname1"); 
    System.out.println(name); 
    List<Person> movie = personDAO.search(name); 
    Person per = new Person(); 
    for (java.util.Iterator<Person> iterator = movie.iterator(); iterator.hasNext();){ 
     per = iterator.next(); 
    } 

    System.out.print(per + " Wtf"); 
    return per; 
} 

Dies ist mein AJAX-Aufruf:

 $.ajax({ 
     url: 'movie.html', 
     dataType: "json", 
     type: "GET", 
     contentType: 'application/json', 
     mimeType: 'application/json', 
     data: 'uname1=' + $('#element0').val(), 
     success: function(data){ 
       $('#col1').text(data.name); 
       $('#col2').text(data.pname); 
       $('#col3').text(data.wname); 
       $('#col4').text(data.lname); 
     }, 
     error: function(xhr, status, error) { 
       $('#col1').text("Undefined"); 
       $('#col2').text("Undefined"); 
       $('#col3').text("Undefined"); 
       $('#col4').text("Undefined"); 
     } 
    }); 

Befestigt unten ein Screenshot der Ausgabe lautet: Eclipse Output

Antwort

1

Statt ein Objekt zurückzugeben. Sie sollten eine Zeichenfolge mit einem Trennzeichen "," zurückgeben und aufteilen, um die gewünschte Ausgabe in der Ansicht zu erhalten.

Laut Mozilla documentation kann der ResponseText String oder XML sein. Sie übergeben ein Objekt, das ein Problem sein kann.

Hier ist ein link das Komma getrennt String zu bekommen und es in der

1

So Ansicht zu verwenden, war das Problem mit meiner URL-Zuordnung. Bevor meine Frage bearbeitet wurde, hatte mein Code einige kommentierte Abschnitte, in denen das Objekt Person analysiert und seine Elemente in ein JSON-Objekt eingefügt wurden. Das Problem war, dass die URL ich für meinen AJAX-Aufruf verwendet hatte eine Erweiterung .html und Spring tatsächlich nutzt die Erweiterung in der URL, um zu entscheiden, welche Art von Inhalt zurückzukehren, wie in erwähnt:

@ResponseBody not working with spring 4.2.4 - not a duplicate I have checked all others

So von ammending das URL-Muster in meiner web.xml wie folgt aus:

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.html</url-pattern> 
    <url-pattern>*.json</url-pattern> 
</servlet-mapping> 

Und anschließend die URL in meine AJAX-Aufruf zum Film zu ändern. JSON:

 $.ajax({ 
     url: 'movie.json', 
     dataType: "json", 
     type: "GET", 
     contentType: 'application/json', 
     mimeType: 'application/json', 
     data: 'uname1=' + $('#element0').val(), 
     success: function(data){ 
       $('#col1').text(data.name); 
       $('#col2').text(data.pname); 
       $('#col3').text(data.wname); 
       $('#col4').text(data.lname); 
     }, 
     error: function() { 
       $('#col1').text("Undefined"); 
       $('#col2').text("Undefined"); 
       $('#col3').text("Undefined"); 
       $('#col4').text("Undefined"); 
     } 
    }); 

Ich konnte das gewünschte Ergebnis erzielen.