我正在尝试使用jQuery get()
函数发出HTTP GET请求,但是我遇到了一些麻烦。
以下是我的代码:
// get the links on the page
var pageLinks = $.find('#pageLinks');
// loop through each of the links
$(pageLinks).find('a').each(function(){
if($(this).attr('title') !== "Next Page"){
// make a GET request to the URL of this link
$.get($(this).attr("href"), function(data) {
console.log("here");
var temp = parse_page(data);
// concatenate the return string with another
bdy = bdy+String(temp);
console.log("done");
});
}
});
我需要多个页面来获取数据。由于get()
函数是异步的,因此我以随机顺序获取页面。其次,连接不起作用。即使我得到了每个页面,但它们都没有被放入bdy
。
有人可以建议我如何处理这件事吗?
非常感谢!!
答案 0 :(得分:0)
在检索完所有页面后构造bdy
,即将get
存储在字典或数组中;等待所有get
完成;然后以正确的顺序组装它们。
答案 1 :(得分:0)
我试过这个并且它有效:
// get the links on the page
var pageLinks = $('a');
var bdy
// loop through each of the links
$(pageLinks).each(function(){
console.log(this);
// make a GET request to the URL of this link
$.get($(this).attr("href"), function(data) {
// concatenate the return string with another
bdy = bdy + data.toString();
console.log(bdy);
});
});
答案 2 :(得分:0)
作为@muratgu所说的例子:
var results = [];
var count = 0;
function allDone() {
var bdy = results.join("");
// do stuff with bdy
}
// get the links on the page
var pageLinks = $.find('#pageLinks');
// filter the links so we're left with the links we want
var wantedLinks = $(pageLinks).find('a').filter(function (idx) {
return $(this).attr('title') !== "Next Page";
});
// remember how many links we're working on
count = wantedLinks.length;
// loop through each of the links
wantedLinks.each(function (idx) {
// make a GET request to the URL of this link
$.get($(this).attr("href"), function (data) {
console.log("here");
var temp = parse_page(data);
results[idx] = temp;
// Decrement the count.
count--;
if (count === 0) {
// All done.
allDone();
}
});
});
您可以进一步将其抽象为可以执行N个异步下载的数据类型,然后在完成所有内容后通知您。
答案 3 :(得分:0)