Javascript 在每个()jQuery之后运行函数
我知道jQuery中的each()是同步的,但它的行为似乎不是这样的。当我这样做时:Javascript 在每个()jQuery之后运行函数,javascript,jquery,Javascript,Jquery,我知道jQuery中的each()是同步的,但它的行为似乎不是这样的。当我这样做时: $('#findRankBtn').click(function () { var websiteURL = $('#websiteURL').val(); var searchTerms = $('#searchTerm').val(); var pageNumber = $('#currentPage').val
$('#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);
}
});
}
$('findRankBtn')。单击(函数(){
var websiteURL=$('#websiteURL').val();
var searchTerms=$('#searchTerm').val();
var pageNumber=$('#currentPage').val();
//为每个空格插入+号
var searchTerms=searchTerms.replace(“,“+”);
searchGoogle(搜索词、页码、网站URL);
});
功能searchGoogle(搜索词、页码、网站URL){
$.getJSON(“https://www.googleapis.com/customsearch/v1?key=AIzaSyDPuIrijE0IQ6330vMLN2p-L_4J6y_G60c&cx=013036536707430787589:_pqjad5hr1a&q=“+searchTerms+”&alt=json&start=“+pageNumber,
函数(接收数据){
//console.log(receiveddata);
$.each(receiveddata.items,function(i,item){
$(“#resultsDiv”).append(“”+item.link+”
”);
var linkAddress=$('.resultLink:last').text();
如果(linkAddress.indexOf(websiteURL)!=-1){
警报(“发现”);
$('.resultLink:last').attr('class','yourLink');
$('iffind').attr('value','true');
}
});
var ifFound=$('#ifFound').val();
var currentPage=$('#currentPage').val();
var nextPage=CurrentPage+1;
如果(ifFound=='false'){
//增量页
$('currentPage').attr('value',下一页);
//再次抓取数据
var websiteURL=$('#websiteURL').val();
var searchTerms=$('#searchTerm').val();
//为每个空格插入+号
var searchTerms=searchTerms.replace(“,“+”);
//搜索谷歌
searchGoogle(searchTerms,下一页);
}
});
}
基本上,如果它在结果的第一页上没有找到所需的链接,它应该转到下一页。我有一把小提琴,只在这里的第一页:
那么,如何让searchGoogle()运行,直到它找到它要查找的内容?
也许有一个更好的方法,那就是在谷歌API中,我不知道?
抱歉,如果我的问题是业余的,我一个月前才开始自学JavaScript 首先,你应该确保你没有达到谷歌的某种利率限制。查看网络选项卡以查看请求是否正确返回 我看到的第一个问题是糟糕的数学 var
currentPage=$('#currentPage').val()代码>是一个字符串
此处var nextPage=CurrentPage+1代码>您将其视为一个数字
在添加之前,必须将字符串转换为数字。您正在执行字符串连接
var nextPage = parseInt(CurrentPage,10) + 1;
挑剔
不要在输入中存储东西。使用变量,它将使事情进行得更快。DOM查找/操作速度很慢
为什么要重新设计addClass和val()
应该是
$('.resultLink:last').addClass('yourLink');
$('#currentPage').val(nextPage);
为什么你要再次抓取搜索词和网站url?您已经将它们传递到函数中了吗
最后你的问题解决了
searchGoogle(searchTerms,下一页);那么,实际问题是什么?是否在$之后的代码。each()
在$之前执行。each()
完成迭代?如果找到链接,则运行此$('iffind')。attr('value','true')
,在运行每个之后,它应该$('#iffind').val()如果这仍然是错误的,它应该再次运行searchGoogle()
,但它不知道有这么多很酷的东西,现在正在修复我的代码。
$('.resultLink:last').addClass('yourLink');
$('#currentPage').val(nextPage);
searchGoogle(searchTerms, nextPage); <-- What are you missing here?
function searchGoogle(searchTerms, pageNumber, websiteURL) { <--what it is expecting