2016-04-04 37 views
0

我試圖從JavaScript使用JavaScript解析JSON響應,並顯示數據。 其餘服務器工作正常,只是我不能解析數據。我看了幾十個例子,並從我的理解代碼看起來很好。 這是我第一次嘗試學習Ajax,如果我解決這個問題,我可以繼續我的項目。無法從休息服務器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

html console error after modification

+0

您的服務器正在返回錯誤。或者至少是HTML,因爲第一個字符是'<'。 嘗試: '嘗試{var obj = JSON.parse(request.responseText); } catch(e){console.log(e,'on',request.responseText); }'請驗證,併發布結果。 – henry700

+0

我添加了新的截圖@ henry700 – Johnny24

+0

您的服務器正在返回XML,而不是JSON!請正確配置服務器,或者使用Javascript解析XML。爲了解析XML,您需要一個庫...您是否嘗試過在'@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON,MediaType.TEXT_XML})'上只留下JSON選項? – henry700

回答

1

您的服務器正在返回XML,嘗試將其強制爲JSON,並可能向客戶端的請求添加接受標頭。

+0

我刪除了MediaType for XML,只留下了Json,它工作。 – Johnny24