2017-03-07 75 views
0

好的,这是我的问题。我正在使用使用分页的API。我保持循环,直到返回的响应是一个空白数组。但是,这不起作用,代码只是挂起。每一个循环,我增加页面变量来获取下一页。while循环与jQuery AJAX分页

// Function to get a list of 50 assignments. 
function getAssignments(token, instuctureSubdomain, course, page, callback) { 
    var settings = { 
     "async": true, 
     "crossDomain": true, 
     "url": "https://" + instuctureSubdomain + ".instructure.com/api/v1/users/self/courses/" + course + "/assignments?per_page=50&page=" + page, 
     "method": "GET", 
     "headers": { 
     "authorization": "Bearer " + token, 
     "cache-control": "no-cache" 
     } 
    } 

    $.ajax(settings).done(function (response) { 
     callback(response); 
    }); 
}; 

var loop = true; 
var page = 1; 
while (loop) { 
    getAssignments(token, instuctureSubdomain, item.id, page, function (response) { 
     if (response.length == 0) { 
// End the loop because the response returned a blank array. 
      loop = false; 
     } else { 
      response.forEach(function (item) { 
// Add the assignment to an array... 
      }); 
      page++ 
     }; 
    }); 
}; 
+0

您是否尝试过使用console.log来查看您获得的结果?我会建议从那里开始。 – Neil

+0

如果分页显示10每次可以说,并且你总共有48个结果,那么最终的回复长度是8而不是0? – Harry

+0

@Harry真,但循环应该再次运行,然后API将返回一个空数组,停止循环。 – juliancz

回答

0

下面是我将如何写它。它不会延迟/冻结您的网页并提供大量请求,并几乎同步地调用它。

<script> 

function loop (i) { 
    $.get("http://example.com/api/" + i + ".php", function (data) { 
     array = process(data); 
     if (array.length > 0) { 
      loop(i + 1); 
     } 
    }); 
} 

loop(1); 

</script>