0

我知道 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。

4

1 回答 1

1

首先,您应该确保您没有达到 Google 的某种速率限制。查看您的网络选项卡以查看请求是否正确返回。

我看到的第一个问题是数学不好。

varcurrentPage = $('#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 时,你正在传递 2 东西。

于 2013-04-11T19:34:49.090 回答