我知道jQuery中的each()是同步的,但它看起来并不像那样。当我这样做时:
$('#findRankBtn').click(function () {
var websiteURL = $('#websiteURL').val();
var searchTerms = $('#searchTerm').val();
var pageNumber = $('#currentPage').val();
//INSERTS A + FOR EVERY SPACE
var searchTerms = searchTerms.replace(" ", "+");
searchGoogle(searchTerms, pageNumber, websiteURL);
});
function searchGoogle(searchTerms, pageNumber, websiteURL) {
$.getJSON("https://www.googleapis.com/customsearch/v1?key=AIzaSyDPuIrijE0IQ6330vMLN2p-L_4J6y_G60c&cx=013036536707430787589:_pqjad5hr1a&q=" + searchTerms + "&alt=json&start=" + pageNumber,
function (recievedData) {
//console.log(recievedData);
$.each(recievedData.items, function (i, item) {
$('#resultsDiv').append('<p class="resultLink">' + item.link + '</p>');
var linkAddress = $('.resultLink:last').text();
if (linkAddress.indexOf(websiteURL) !== -1) {
alert('found');
$('.resultLink:last').attr('class', 'yourLink');
$('#ifFound').attr('value', 'true');
}
});
var ifFound = $('#ifFound').val();
var currentPage = $('#currentPage').val();
var nextPage = CurrentPage + 1;
if (ifFound == 'false') {
//INCREMENT PAGE
$('#currentPage').attr('value', nextPage);
//GRAB DATA AGAIN
var websiteURL = $('#websiteURL').val();
var searchTerms = $('#searchTerm').val();
//INSERTS A + FOR EVERY SPACE
var searchTerms = searchTerms.replace(" ", "+");
//SEARCH GOOGLE
searchGoogle(searchTerms, nextPage);
}
});
}
基本上如果它在结果的第一页上找不到所需的链接,它应该继续下一页。我在这里的第一页有一个工作小提琴:http://jsfiddle.net/p8DY3/1/ 那么我怎样才能让searchGoogle()运行直到它找到它想要的东西? 也许有一种更好的方法来解决它在我不知道的Google API中? 对不起,如果我的问题是业余的,我一个月前才开始自己学习JavaScript。
答案 0 :(得分:1)
首先,您应该确保没有达到Google的某种速率限制。查看“网络”选项卡,查看请求是否正确回传。
我看到的第一个问题是数学不好。
var currentPage = $('#currentPage').val();
是一个字符串
这里var nextPage = CurrentPage + 1;
您将其视为一个数字。
在添加之前,您必须将字符串转换为数字。你正在进行字符串连接!
var nextPage = parseInt(CurrentPage,10) + 1;
挑剔
不要将东西存放在输入中。使用变量,它会让事情变得更快。 DOM查找/操作很慢。
为什么要重新发明addClass和val()
$('.resultLink:last').attr('class', 'yourLink');
$('#currentPage').attr('value', nextPage);
应该是
$('.resultLink:last').addClass('yourLink');
$('#currentPage').val(nextPage);
为什么要再次抓取搜索字词和网站网址?你已经把它们传递给了这个函数吗?
最后你的问题
searchGoogle(searchTerms, nextPage); <-- What are you missing here?
function searchGoogle(searchTerms, pageNumber, websiteURL) { <--what it is expecting
当你想要3时,你传递了两件事。