2016-04-04 7 views
0

Ich versuche, eine JSON-Antwort von einem Rest-Server mit JavaScript zu analysieren und die Daten anzuzeigen. Der Rest-Server funktioniert gut, nur dass ich die Daten nicht analysieren kann. Ich habe Dutzende von Beispielen angeschaut und nach meinem Verständnis sieht der Code gut aus. Dies ist mein erster Versuch, Ajax zu lernen und wenn ich das repariere, kann ich mit meinem Projekt fortfahren.Nicht in der Lage, JSON-Antwort vom Rest-Server

Dies ist die Antwort

{"id":"1","author":"Bill Burke","title":"RESTful Java with JAX-RS","year":"2009"} 

Dies ist der Server

@Path("/books") // JAX-RS annotation 
public class BookResource { 

@GET // JAX-RS annotation 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_XML }) 
@Path("/{bookId}") 
public Book getBook(@PathParam("bookId") String id) { 
    return BookDao.instance.getBook(Integer.parseInt(id)); 
} 
} 

dies der Client

<!DOCTYPE html> 
<html> 
<head> 
<title>Form to create a new resource</title> 

<script type="text/javascript"> 

function getHTTPObject() { 
    var xhr = false; 
    if (window.XMLHttpRequest) { 
     xhr = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     try { 
      xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try { 
       xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e) { 
       xhr = false; 
      } 
     } 
    } 
    return xhr; 
} 

function grabFile(file) { 
    var request = getHTTPObject(); 
    if (request) { 
     request.onreadystatechange = function() { 
      parseJ(request); 
     }; 
     request.open("GET", file, true); 
     request.send(null); 
    } 
} 

function parseJ(request) { 
    if (request.readyState == 4) { 
     if (request.status == 200 || request.status == 304) { 

      var obj = JSON.parse(request.responseText); 
      document.getElementById("details").innerHTML = obj.id + " " + obj.author + " " 
        + obj.title + " " + obj.year; 

     } 
    } 
} 
</script> 
</head> 
<body> 

<a 
    href="http://localhost:8080/Distributed_REST_booksServer/rest/books/1" 
    onclick="grabFile(this.href); return false;">Book 1</a> 
<br> 
<div id="details"></div> 
</body> 
</html> 

html console error

ist 210

+0

Ihr Server gibt einen Fehler zurück. Oder zumindest HTML, denn das erste Zeichen ist '<'. Versuchen Sie: 'versuchen {var obj = JSON.parse (request.responseText); } catch (e) {console.log (e, 'on', request.responseText); } 'um zu überprüfen, bitte, und posten Ergebnisse. – henry700

+0

Ich habe einen neuen Screenshot hinzugefügt @ henry700 – Johnny24

+0

Ihr Server gibt XML zurück, nicht JSON! Konfigurieren Sie den Server entweder ordnungsgemäß oder parsen Sie XML stattdessen mit Ihrem Javascript. Zum Parsen des XML benötigen Sie eine Bibliothek ... Haben Sie versucht, nur die JSON-Option auf '@Products ({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_XML})' zu belassen? – henry700

Antwort

1

Ihr Server gibt XML zurück, versucht, sie als JSON zu erzwingen und fügt möglicherweise einen Accept-Header zur Anfrage vom Client hinzu.

+0

Ich entfernte den MediaType für XML und verließ nur Json und es funktionierte. – Johnny24