Javascript 返回空数组的JSON响应
请帮助我,我已经尝试了1个小时,但没有得到什么错误Javascript 返回空数组的JSON响应,javascript,json,Javascript,Json,请帮助我,我已经尝试了1个小时,但没有得到什么错误 结果 var xmlhttp=new XMLHttpRequest(); 变量url=”http://it-ebooks-api.info/v1/book/2279690981"; xmlhttp.onreadystatechange=函数(){ if(xmlhttp.readyState==4&&xmlhttp.status==200){ var myArr=JSON.parse(xmlhttp.responseText); myFunc
结果
var xmlhttp=new XMLHttpRequest();
变量url=”http://it-ebooks-api.info/v1/book/2279690981";
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var myArr=JSON.parse(xmlhttp.responseText);
myFunction(myArr);
}
}
open(“GET”,url,true);
xmlhttp.send();
函数myFunction(arr){
var out=“”;
var i;
对于(i=0;i
响应不包含数组,因此不需要for循环,这将为您提供所需的结果:
<!DOCTYPE html>
<html>
<body>
<div id="id01">Result<br/></div>
<script>
var xmlhttp = new XMLHttpRequest();
var url = "http://it-ebooks-api.info/v1/book/2279690981";
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myresponse = JSON.parse(xmlhttp.responseText);
myFunction(myresponse);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
function myFunction(response) {
var out = "";
var i;
out = "<p>" + response.ID + response.Title + response.Description + "<p>";
document.getElementById("id01").innerHTML = out;
}
</script>
</body>
结果
var xmlhttp=new XMLHttpRequest();
变量url=”http://it-ebooks-api.info/v1/book/2279690981";
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var myresponse=JSON.parse(xmlhttp.responseText);
myFunction(myresponse);
}
}
open(“GET”,url,true);
xmlhttp.send();
功能myFunction(响应){
var out=“”;
var i;
out=“”+response.ID+response.Title+response.Description+””;
document.getElementById(“id01”).innerHTML=out;
}
如果使用中提供的完整列表,则需要for循环遍历数组,如下所示:
<!DOCTYPE html>
<html>
<body>
<div id="id01">Result<br/></div>
<script>
var xmlhttp = new XMLHttpRequest();
var url = "http://it-ebooks-api.info/v1/search/php";
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myresponse = JSON.parse(xmlhttp.responseText);
myFunction(myresponse.Books);
}
}
function myFunction(Books) {
var out = "";
for (var i = 0; i < Books.length; i++) {
out += "<p>ID: " + Books[i].ID + "</p>" + "<p>Title: " + Books[i].Title + "</p>" + "<p>Description: " + Books[i].Description + "</p>"
}
document.getElementById("id01").innerHTML = out;
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
<div id="id01">Result<br/></div>
<script>
var xmlhttp = new XMLHttpRequest();
var url = "http://it-ebooks-api.info/v1/search/php";
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var response = JSON.parse(xmlhttpo.responseText);
if (response.Books) { // If the response object has Books array, we pass it to the parseBooks functoin to add them all one by one.
parseBooks(response.Books)
} else {
addBook(response); // If there is no Books array, we assume that there is only one book and add it to the list with addBook function.
}
}
}
function addBook (Book) {
var text = document.getElementById("id01").innerHTML;
var body = "<p>ID: " + Book.ID + "</p><p>Title: " + Book.Title + "</p><p>Description: " + Book.Description + "</p>";
document.getElementById("id01").innerHTML = text + body; // Append the innerHTML with the new Book.
}
function parseBooks(Books) {
for (var i = 0; i < Books.length; i++) {
addBook(Books[i]) // Add all books in the array one by one
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
</script>
</body>
</html>
结果
var xmlhttp=new XMLHttpRequest();
变量url=”http://it-ebooks-api.info/v1/search/php";
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var myresponse=JSON.parse(xmlhttp.responseText);
myFunction(myresponse.Books);
}
}
函数myFunction(书籍){
var out=“”;
for(var i=0;i“+”标题:“+Books[i].标题+”“+”说明:“+Books[i].说明+””
}
document.getElementById(“id01”).innerHTML=out;
}
open(“GET”,url,true);
xmlhttp.send();
为了让它更优雅一点,您可以使用一个函数来添加书籍,如果您只得到一本书,您可以直接从onreadystatechange调用它,如果您有完整的列表,那么您可以循环使用它,但仍然使用相同的函数。比如说:
<!DOCTYPE html>
<html>
<body>
<div id="id01">Result<br/></div>
<script>
var xmlhttp = new XMLHttpRequest();
var url = "http://it-ebooks-api.info/v1/search/php";
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myresponse = JSON.parse(xmlhttp.responseText);
myFunction(myresponse.Books);
}
}
function myFunction(Books) {
var out = "";
for (var i = 0; i < Books.length; i++) {
out += "<p>ID: " + Books[i].ID + "</p>" + "<p>Title: " + Books[i].Title + "</p>" + "<p>Description: " + Books[i].Description + "</p>"
}
document.getElementById("id01").innerHTML = out;
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
<div id="id01">Result<br/></div>
<script>
var xmlhttp = new XMLHttpRequest();
var url = "http://it-ebooks-api.info/v1/search/php";
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var response = JSON.parse(xmlhttpo.responseText);
if (response.Books) { // If the response object has Books array, we pass it to the parseBooks functoin to add them all one by one.
parseBooks(response.Books)
} else {
addBook(response); // If there is no Books array, we assume that there is only one book and add it to the list with addBook function.
}
}
}
function addBook (Book) {
var text = document.getElementById("id01").innerHTML;
var body = "<p>ID: " + Book.ID + "</p><p>Title: " + Book.Title + "</p><p>Description: " + Book.Description + "</p>";
document.getElementById("id01").innerHTML = text + body; // Append the innerHTML with the new Book.
}
function parseBooks(Books) {
for (var i = 0; i < Books.length; i++) {
addBook(Books[i]) // Add all books in the array one by one
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
</script>
</body>
</html>
结果
var xmlhttp=new XMLHttpRequest();
变量url=”http://it-ebooks-api.info/v1/search/php";
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var response=JSON.parse(xmlhttpo.responseText);
if(response.Books){//如果response对象具有Books数组,我们将其传递给parseBooks function,以逐个添加它们。
parseBooks(response.Books)
}否则{
addBook(response);//如果没有Books数组,我们假设只有一本书,并使用addBook函数将其添加到列表中。
}
}
}
函数addBook(Book){
var text=document.getElementById(“id01”).innerHTML;
var body=“ID:”+Book.ID+”Title:“+Book.Title+”Description:“+Book.Description+””;
document.getElementById(“id01”).innerHTML=text+body;//将innerHTML附加到新书中。
}
功能解析书(书){
for(var i=0;i
JSON提要只是一个简单的对象,而不是一个对象数组。注意返回的提要中开头的花括号:{}
然后,您应该更改myFunction
函数,使其仅通过删除for
循环即可通过对象而不是数组:
函数myFunction(obj){
var out=“”,
id01=document.getElementById(“id01”);
out=对象ID+对象标题+对象描述;
id01.innerHTML=id01.innerHTML+out;
}
编辑:
当必须解析对象数组时,可以在for循环中使用相同的函数
将返回的JSON作为提要,您可以检索Books
值,然后在其中循环:
var xmlhttp=new XMLHttpRequest();
变量url=”http://it-ebooks-api.info/v1/book/2279690981";
变量url2=”http://it-ebooks-api.info/v1/search/php";
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var rslt=JSON.parse(xmlhttp.responseText);
控制台日志(rslt);
var books=rslt.books;
for(var i=0;i
我强烈建议使用简化ajax调用的库之一。但是,在本例中:您是否正在执行jsonp?科尔斯?您如何进入另一台服务器?或者它是电子书api.info
您的服务器吗?不同的服务器。但是我刚刚发现json对象端的include[]正在运行它。看起来您的端点返回的是一个对象,而不是一个数组。感谢您的回答,它工作正常。但是现在我将如何处理这个问题呢?我编辑了答案,也涵盖了这个问题。因此,当您调用/v1/search/php并获得完整的列表时,您可以访问响应中的Books数组,并通过它在myFunction循环中访问它,为每本书创建所需的元素。如果只调用特定的book,则不会得到Books数组,而是一个对象。最好为数组和straight对象保留一个函数,并通过调用该函数的数组进行迭代。谢谢@missingSemicolon@tmarwen对。用更简洁的方式修改了答案。谢谢你的答案,它很有效。但是现在我将如何处理这个it-ebooks-api.info/v1/search