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>
ist 210
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
Ich habe einen neuen Screenshot hinzugefügt @ henry700 – Johnny24
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