使用PHP Curl,Jquery In Loop获取多个url数据

时间:2013-07-04 16:17:02

标签: php javascript ajax curl

我从(http://w3lessons.info/2012/01/03/facebook-like-fetch-url-data-using-php-curl-jquery-and-ajax/)发现了这个脚本问题是我想循环使用多个网址。

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

有没有我可以做循环并同时加载不同的不同URL?请帮帮我!

1 个答案:

答案 0 :(得分:1)

在无法创建线程的JavaScript中。
所以你不能同时获取所有那些“不同的网址”。

但是你可以“几乎”使用事件循环来实现同样的事情,一个接一个地快速请求它们而无需等待HTTP响应。谁最终很快!

让我们假设你想要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();
}