2016-04-04 39 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