使用jquery和greasemonkey获取多个页面

时间:2010-02-28 16:37:15

标签: jquery ajax greasemonkey

对不起,标题不是很好,这是一个有问题的... 我想要做的是从页面上的链接加载多个页面(它们位于同一主机上)。在我的情况下,它是线程视图中的一个论坛,我想加载帖子的最后一页,以便进行某种预览。

为了简单起见,我的代码示例假设已经加载了jquery。

基本上代码正在运行,但是如果有多个请求,页面就会挂起,即 - 如果我将条件更改为intIndex< 3个或更多。

    $('.lastposter').each(
        function (intIndex){
            if(intIndex < 2){
                var threadlink = $('a', this)[1].href;
                var thread = $.ajax({ type: "GET", url: threadlink, async: false }).responseText;

                $(this.parentNode.parentNode).attr('title', $('.post', thread).text());

            }
        }
    );

那么我的问题是,有没有更好的方法呢?我在想我只是需要在循环中暂停,或者可能更改它以便ajax请求发生在(例如)行的悬停事件上。 此外,结果是否会被缓存?如果没有,有没有办法让他们缓存或我应该把它留给服务器?我当时想把它们存储为GM变量(GM_setValue),但这可能会变得混乱或泄漏。

如果你有一些想法,建议,例子等,我很乐意听到它们。

1 个答案:

答案 0 :(得分:1)

您的代码存在问题,即它请求 - 异步请求。这导致$ .ajax函数等待服务器回答。

对于异步请求,您需要定义一个回调函数,如下所示:

$.get(threadlink, function(thread) {  
    $(this.parentNode.parentNode).attr('title', $('.post', thread).text());  
});

要逐个处理链接,而不是一堆同时的请求,您可以以特定的速率一次一个地捕获数组中的节点(makeArray)和pop({ {1}})。请注意,这里有一些陷阱......

结果将与其他任何页面一样缓存。 IE将在到期日之前无法检索它。也许你必须改变服务器缓存/过期响应头。

看看这个,听起来很相似(但不使用jquery)

http://userscripts.org/scripts/show/19613