2013-07-04 60 views
0

我發現這個腳本來自(http://w3lessons.info/2012/01/03/facebook-like-fetch-url-data-using-php-curl-jquery-and-ajax/)問題是我想要在多個url的循環中做。使用PHP獲取多個網址數據Curl,Jquery In Loop

<link rel="stylesheet" type="text/css" href="style.css" /> 
    <!--[if lt IE 7]> 
     <link rel="stylesheet" type="text/css" href="style-ie.css" /> 
    <![endif]--> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script> 
<script type="text/javascript" src="js/jquery.livequery.js"></script> 
<script type="text/javascript" src="js/jquery.watermarkinput.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
     // delete event 
     $('#attach').livequery("click", function(){ 

      if(!isValidURL($('#url').val())) 
      { 
       alert('Please enter a valid url.'); 
       return false; 
      } 
      else 
      { 
       $('#load').show(); 
       $.post("curl_fetch.php?url="+$('#url').val(), { 
       }, function(response){ 
        $('#loader').html($(response).fadeIn('slow')); 
        $('.images img').hide(); 
        $('#load').hide(); 
        $('img#1').fadeIn(); 
        $('#cur_image').val(1); 
       }); 
      } 
     }); 
     // next image 
     $('#next').livequery("click", function(){ 

      var firstimage = $('#cur_image').val(); 
      $('#cur_image').val(1); 
      $('img#'+firstimage).hide(); 
      if(firstimage <= $('#total_images').val()) 
      { 
       firstimage = parseInt(firstimage)+parseInt(1); 
       $('#cur_image').val(firstimage); 
       $('img#'+firstimage).show(); 
      } 
     }); 
     // prev image 
     $('#prev').livequery("click", function(){ 

      var firstimage = $('#cur_image').val(); 

      $('img#'+firstimage).hide(); 
      if(firstimage>0) 
      { 
       firstimage = parseInt(firstimage)-parseInt(1); 
       $('#cur_image').val(firstimage); 
       $('img#'+firstimage).show(); 
      } 

     }); 
     // watermark input fields 
     jQuery(function($){ 

      $("#url").Watermark("http://"); 
     }); 
     jQuery(function($){ 

      $("#url").Watermark("watermark","#369"); 

     }); 
     function UseData(){ 
      $.Watermark.HideAll(); 
      $.Watermark.ShowAll(); 
     } 
    }); 

    function isValidURL(url){ 
     var RegExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; 

     if(RegExp.test(url)){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
</script> 
<input type="hidden" name="cur_image" id="cur_image" /> 
<div class="wrap" align="center"> 
    <div class="box" align="left"> 
     <input type="text" name="url" size="64" id="url" />&nbsp;&nbsp; 
     <input type="button" name="attach" value="Attach" id="attach" /> 
     <div id="loader"> 
     <div align="center" id="load" style="display:none"><img src="load.gif" /></div> 
     </div> 
</div></div> 

有沒有我可以做的循環和加載不同的不同的網址同時?請幫幫我!

回答

1

在JavaScript中無法創建線程。
所以你不能獲取所有這些「在同一時間不同的網址」。

但是,您可以使用事件循環來「幾乎」實現相同的事情,以便在不等待HTTP響應的情況下快速請求它們。誰最終變得非常快!

比方說,爲例想featch 3網址:

  • www.mysite.com/myurl1
  • www.mysite.com/myurl2
  • www.mysite.com/myurl3

您可以編寫類似的東西使用jQuery:

$.get('http://www.mysite.com/myurl1', function(data) { 
    alert('html for site 1:' +data); 
}); 

$.get('http://www.mysite.com/myurl2', function(data) { 
    alert('html for site 2:' +data); 
}); 

$.get('http://www.mysite.com/myurl3', function(data) { 
    alert('html for site 3:' +data); 
}); 

它會在同一時間「幾乎」要求3頁。 第一個HTTP請求會調用「alert('html for site x:...');」
但你不知道女巫會先到達。

無論如何,你可能需要更靈活的東西。
比方說,您希望使用200個同時請求「請求幾乎」同時請求50,000個頁面。
您可以使用JavaScript編寫類似的東西:

function getNextUrl(){ 

    urlIndex ++; 

    if(urlIndex >= stopAtIndex){ 
     //nothing to do anymore in the event loop 
     return; 
    } 

    $.get('http://www.mysite.com/myurl'+urlIndex, function(data) { 
     // html receivend here 
     getNextUrl(); 
    }); 

} 

/* program start here */ 
int urlIndex = 0; 
int stopAtIndex = 50000; 
int simultaneousRequest = 200; 

for(var i = 0; i < simultaneousRequest; i++) { 
    getNextUrl(); 
} 
+0

如何創建事件循環?你能告訴我嗎。謝謝 –

+0

@SunilPatel我所有的例子都使用事件循環。我建議你閱讀http://javascript.info/tutorial/events-and-timing-depth –

+0

再次感謝。我將腳本插入頂部腳本並試圖獲取URL循環,但它不起作用。您能否讓我知道我需要插入您提供的腳本的位置。 –