2013-04-11 3 views
0

jQuery의 each()가 동 기적이라는 것을 알고 있지만 그렇게 행동하지는 않습니다. 이 작업을 수행 할 때 :each() jQuery 다음에 함수를 실행하십시오.

  $('#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

그래서 실제 문제가 무엇인가를 원할 때 당신은 2 일에 전달하는? '$ .each()'가 반복되기 전에'.each()'가 실행 된 후에 코드가 실행됩니까? –

+0

각 링크를 실행 한 후, $ ('# ifFound') .val()을 실행해야합니다.이 링크는'$ ('# ifFound'). attr ('value', ' ;'여전히 false라면'searchGoogle()'을 다시 실행해야하지만 dox't do는 실행되지 않습니다. – user2137087

답변

1

먼저 Google에서 일종의 속도 제한을 치지 않았는지 확인해야합니다. 네트워크 탭을보고 요청이 올바르게 다시 수신되는지 확인하십시오.

내가 처음 보는 것은 나쁜 수학입니다.

VAR currentPage = $('#currentPage').val();는 숫자로 치료하는 var nextPage = CurrentPage + 1; 문자열 여기

에게 있습니다.

추가하기 전에 문자열을 숫자로 변환해야합니다. 당신은 문자열 연결을하고 있습니다!.

var nextPage = parseInt(CurrentPage,10) + 1; 

NITPICKS는

는 입력에 물건을 보관하지 마십시오. 변수를 사용하면 일이 훨씬 빨라집니다. DOM 조회/조작 속도가 느립니다.

$('.resultLink:last').attr('class', 'yourLink'); 
$('#currentPage').attr('value', nextPage); 

$('.resultLink:last').addClass('yourLink'); 
$('#currentPage').val(nextPage); 

해야한다()

왜 당신이 재발하는 addClass와 val 왜 다시 검색어와 웹 사이트 URL을 잡는거야? 당신은 이미 그것들을 함수에 넘겨 줬습니까?

마지막 문제

searchGoogle(searchTerms, nextPage); <-- What are you missing here? 
function searchGoogle(searchTerms, pageNumber, websiteURL) { <--what it is expecting 

는 3

+0

나는 멋진 코드가 모두 있다는 것을 몰랐습니다. – user2137087

관련 문제