Javascript 返回空数组的JSON响应

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

请帮助我,我已经尝试了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); 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