0

我从( http://w3lessons.info/2012/01/03/facebook-like-fetch-url-data-using-php-curl-jquery-and-ajax/ )找到了这个脚本问题是我想做与多个 url 循环。

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

有什么我可以循环并同时加载不同的不同网址吗?请帮我!

4

1 回答 1

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();
}
于 2013-07-04T16:20:53.077 回答