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 を独学で学習し始めてまだ 1 か月しか経っていません。

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);

検索語句と Web サイトの URL を再度取得するのはなぜですか? すでにそれらを関数に渡していますか?

最後にあなたの問題

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 に答える