2013-09-06 3 views
0

Я знаю, что это не очень хорошая работа, но каждый программист хочет узнать больше. На данный момент я пытаюсь очистить веб-страницы. В первый раз, создавая скрипт и запуская его, я блокирую свой ip-адрес. Я ошибался, потому что в моем сценарии я посылаю слишком много запросов на сайт, таким образом, это будет стоить большому трафику на сайт и заставить их думать, что я нарушитель, Я пришел к этой идее, чтобы отложить мой запрос. Как заставить мой цикл ждать завершения функции? Я не хочу использовать что-то вроде этого. Это будет выполняться каждые 5 секундФункция задержки Javascript, но пусть цикл ждет его

(function(links){ 
    setTimeout(function() { scrapeAnotherLink(links); }, delay); 
})(result[val]); 
delay += 5000; 

Я хочу, чтобы ждать мой запрос Ajax, чтобы закончить слом по ссылке, предоставленной затем подождите 5 секунд, затем выполнить еще раз.

мой код.

scrape ссылки. // просто образец

$('#scrape').click(function() { 
      $.ajax({ 
      type: 'get', 
      url: 'scrape.php', 
      data:{Param:1}, 
      dataType: 'json', 
      cache: false, 
       success: function(result) { 
       for(var val in result) { 
        link = result[val]; 
         scrapeAnotherLink(link); 
       } 
       }, 
      }); 
    }); 


function scrapeAnotherLink(link){ 
    //Some ajax here 
    setTimeout(function() { 
     output_log(link); 
    }, 5000); 
} 

function output_log(str){ 

    $('#output').append(str+'<br/>'); 
} 

Я читал, что некоторые скреперов пулы IP-адрес, но я не имею понятия, как

+0

Положите его в JS Fiddle –

ответ

0

Что-то, как это будет делать эту работу. Вместо использования цикла сделайте рекурсивный вызов, который будет выполнен, когда предыдущий запрос ajax завершен. В приведенном ниже коде есть некоторые предположения, но он передает идею.

function executeAjax() { 
    $.ajax({ 
     type: 'get', 
     url: 'scrape.php', 
     data:{Param:1}, 
     dataType: 'json', 
     cache: false, 
     success: function(links) { 
      scrapeAnotherLink(links, 0); 
     } 
    }); 
} 

function scrapeAnotherLink(links, index){ 
    //Some ajax here 
    function executeCall(){ 
     $.ajax({ 
      url : links[index], 
      success : function(str) { 
       output_log(str); 
       scrapeAnotherLink(links, ++index); 
      } 
     }); 
    } 
    setTimeout(executeCall, 5000); 
} 

function output_log(str){ 
    $('#output').append(str+'<br/>'); 
} 
+0

Спасибо, что сделал трюк .. – Snippet

+0

вы забыли, чтобы остановить рекурсивный вызов – Snippet

+0

True. Это просто 'if (index> = links.length) return;'. Надеюсь это поможет –

Смежные вопросы