Javascript 当循环请求JSON时
我一直在尝试做一些我认为很简单的事情,但现在我很确定我已经完全过度简化了它,或者只是把我的循环的一些基本内容弄糟了。我试图搜索包含JSON对象的链接列表,以找到包含特定数据的特定链接 我正在查看的JSON链接如下所示: 链接1:Javascript 当循环请求JSON时,javascript,json,Javascript,Json,我一直在尝试做一些我认为很简单的事情,但现在我很确定我已经完全过度简化了它,或者只是把我的循环的一些基本内容弄糟了。我试图搜索包含JSON对象的链接列表,以找到包含特定数据的特定链接 我正在查看的JSON链接如下所示: 链接1: {"genre": "fantasy", "title": "Book 1"} 链接2: {"genre": "scifi", "title": "Book 2"} 我循环的目标是找到一本“科幻”类型的书,然而我当前的代码只是导致或没有发生任何事情。如果有人能发现我
{"genre": "fantasy", "title": "Book 1"}
链接2:
{"genre": "scifi", "title": "Book 2"}
我循环的目标是找到一本“科幻”类型的书,然而我当前的代码只是导致或没有发生任何事情。如果有人能发现我做错了什么,请告诉我。如果不清楚我对这方面还不太熟悉,那么任何建议都是非常受欢迎的
function find_book(){ // called by button onclick
var i = curr_line+1 // current line's default value is 0
var x = 0;
var limit = bookcount-1; //bookcount is total number of books
while(x != 1) {
request= new XMLHttpRequest();
request.open("GET","http://example.com/books/?book="+i,true);
request.onreadystatechange=function() {
if(request.readyState==4 && request.status==200) {
var jsonbook = JSON.parse(request.responseText);
alert('genre is'+jsonbook.genre);
}
}
request.send()
if(jsonbook.genre == "scifi"){
alert('book is at '+i);
x=1;
}
if(i>limit){
alert('end of book list');
x=1;
}
i++;
}
}
第一次观察。尝试将下面的代码移动到您的
警报下(“类型为”+jsonbook.genre)代码>行
if(jsonbook.genre == "scifi"){
alert('book is at '+i);
x=1;
}
if(i>limit){
alert('end of book list');
x=1;
}
它应该如下所示,因为调用是异步的,一旦它返回,您就必须使用逻辑处理jsonobject
if(request.readyState==4 && request.status==200)
{
var jsonbook = JSON.parse(request.responseText);
alert('genre is'+jsonbook.genre);
if(jsonbook.genre == "scifi"){
alert('book is at '+i);
x=1;
}
if(i>limit){
alert('end of book list');
x=1;
}
}
JSON手册超出范围。另外,ajax调用是异步进行的(这是ajax中的a),请尝试调用一个直接的函数recursivley。例如:
function check_book(bookID, limit) {
request = new XMLHttpRequest();
request.open("GET", "http://example.com/books/?book=" + bookID, true);
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
var jsonbook = JSON.parse(request.responseText);
alert('genre is' + jsonbook.genre);
if (jsonbook.genre == "scifi") {
alert('book is at ' + bookID);
return;
} else if (bookID > limit) {
alert('end of book list');
return,
} else {
bookID++;
check_book(bookID, limit)
}
}
}
request.send()
}
function find_book(){ // called by button onclick
var i = curr_line+1 // current line's default value is 0
var limit = bookcount-1; //bookcount is total number of books
check_book(i, limit);
}
这仍然会导致调用函数导致浏览器崩溃。不过,感谢您的建议。浏览器崩溃不适用于此代码。。这是因为更多的内存密集型工作。。有点像一个大环