我正在尝试创建一个循环,每次都通过$.post
检索其他页面的内容,并在完成后执行下一页,直到该页面上的元素显示0结果。
function scrapeIt() {
$(".currentPage").html("Current Page: " + page);
$.post("scrapePosts.aspx", { page: page, search: keyword }, function (data) {
$(".status").html(data);
if ($("#count").html() == "10") {
scrapeIt();
} else {
alert("Stopping...");
}
});
page++;
}
$(document).ready(function () {
var page = 1;
var keyword;
var stillGettingResults = true;
$("#go").click(function () { //Start Button
keyword = $("#keyword").val(); // Textbox
$(".status").html("Loading...");
scrapeIt();
});
});
这个想法是scrapeIt()
函数再次调用自己,但只有当它完成了post请求时才会这样做。它似乎只是冻结了。
答案 0 :(得分:3)
var page = 1
和var keyword
都应在全局范围内声明,否则undefined
中的function scrapeIt()
。
您的网页可能看起来很冻结,因为在帖子请求中没有发送page
或keyword
,服务器可能无法理解请求。
答案 1 :(得分:0)
请参阅setTimeout() $.post
我不是异步并且经常调用它会冻结浏览器线程
答案 2 :(得分:0)
由于递归页面始终为零。 您需要在post回调中增加页面变量,而不是在scrapeIt结束时。
$.post("scrapePosts.aspx", { page: page, search: keyword }, function (data) {
page++;
$(".status").html(data);
if ($("#count").html() == "10") {
scrapeIt();
} else {
alert("Stopping...");
}