2016-04-04 11 views
0

JavaScriptを使用して、残りのサーバーからJsonレスポンスを解析し、そのデータを表示しようとしています。 残りのサーバーは正常に動作し、データを解析できません。私は数十の例を見てきましたが、私の理解からはコードはうまく見えます。 これはAjaxを学ぶ私の最初の試みです。これを修正すれば私のプロジェクトを続けることができます。restサーバーからJsonレスポンスを受け取ることができません

この応答

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

これは、サーバー

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

これは、クライアント

<!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

ありです210

+0

サーバーがエラーを返しています。最初の文字は '<'なので、少なくともHTMLでなければなりません。 試してみてください: 'try {var obj = JSON.parse(request.responseText); } catch(e){console.log(e、 'on'、request.responseText); }結果を確認してください。 – henry700

+0

新しいスクリーンショットを追加しました@ henry700 – Johnny24

+0

サーバーがJSONではなくXMLを返しています!サーバーを正しく構成するか、代わりにJavascriptでXMLを解析します。 XMLの解析にはライブラリが必要です... '@Produces({MediaType.APPLICATION_XML、MediaType.APPLICATION_JSON、MediaType.TEXT_XML})'にJSONオプションだけを残そうとしましたか? – henry700

答えて

1

サーバーがXMLを返しています。これをJSONとして強制し、クライアントからの要求に受け入れ可能なヘッダーを追加してください。

+0

私はXML用のMediaTypeを削除し、Jsonだけ残していました。 – Johnny24

関連する問題