【问题标题】:how to use jquery to load from array of pages - in order如何使用 jquery 从页面数组中加载 - 按顺序
【发布时间】:2011-07-28 19:03:11
【问题描述】:

我从一个页面中抓取了一堆链接,然后从这些页面中提取一个特定的内容元素。我刚刚创建的代码可以正常工作。

问题是因为请求是异步的,元素没有按顺序加载。我尝试添加延迟,但没有奏效。

我是否需要使用 .ajax 而不是 .load?如果是这样,这个循环追加在 .ajax 命令中会是什么样子?您仍然可以使用带有 url 的选择器吗?或者有没有一种有效的方法可以通过 .load 实现这一目标?

提前致谢。

    function runthis() {

var links = $("#article-slide-belt a").map(function() {
                return this.href;
            }).get();

$.each( links, function(i, l){

    $("<div>").load(l + " .gl_left", function() {
          $(".gl_left").append($(this).find(".gl_left").html());
    });

 });

}

【问题讨论】:

    标签: jquery ajax asynchronous load append


    【解决方案1】:

    您可以指定在第一个请求完成时加载的下一个链接 - 下面的代码不是很优雅,但它会做你想做的事

    var links
    var content_index=0;
    $(document).ready( function() {
        links = $("#article-slide-belt a").map( function() {
            return this.href;
        }).get();
        loadContent()
    })
    function loadContent() {
        if (content_index<links.length) {
            $("div").load(links[content_index] + " .gl_left", function() {
                $(".gl_left").append($(this).find(".gl_left").html());
                content_index++;
                loadContent();
            });
        }
    }
    

    【讨论】:

    • 我尝试了您的代码,但是当我尝试执行它时它挂起/浏览器崩溃。 ohword.com/simplex.js
    • 哦等等...我想我在那里找到了问题...在 var 链接后缺少分号
    • 对于一个书签,您可能不需要文档就绪块,并且我的函数也包含在您的 runthis() 函数中,考虑到我正在递归调用 loadContent,这可能会导致浏览器崩溃。我在书签方面没有太多经验,所以我不确定还有什么问题。
    • 您还需要确保 links 和 content_index 变量在范围内都是全局的
    • 对不起,你能帮我弄清楚我哪里出错了。 ohword.com/simplex.js我将范围更改为全局并摆脱了文档就绪块
    【解决方案2】:

    【讨论】:

    • 这看起来很酷,但也不确定如何使用......我会试一试并报告。
    • 我无法让 ajax 队列正常工作,但我确实搜索并找到了 protofunc.com/scripts/jquery/ajaxManager,它在概念上相似并且确实有效。我对 Michal 的好建议和教育的回答投了赞成票,但排队是正确的答案。书签脚本现在执行得很好。谢谢。
    【解决方案3】:

    我尝试了同步 .ajax 路由。它以正确的顺序出现,但等待令人难以忍受。加载数据时需要可读的页面。

    $.each( links, function(i, l){
    
    $.ajax({        
         url: l,                         
         async: false,         
         success: function(data){
        var $response=$(data);
    
        $(".gl_left").append($response.find(".gl_left").html());
    
        }     
         });
    
     });
    

    【讨论】:

    • 我认为递归可能是一种更好的方法。您应该在第一个成功的情况下启动下一个负载。
    猜你喜欢
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2011-06-20
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多