【问题标题】:Using settimeout method on page submit在页面提交上使用 settimeout 方法
【发布时间】:2012-11-01 09:21:05
【问题描述】:

我需要获取网站中可用的列表项,该列表项以分页样式列出项目。我将提取每个页面上项目的信息。我使用settimeout(function(){...code...}, 5000) 编写了一个Javascript 代码,并在Firefox Web 控制台中运行此代码。脚本获取页面中的所有项目,一旦完成,脚本通过执行超链接“next”的click() 方法提交页面。这将一直持续到页面中有“下一页”超链接(在最后一页中只有“后退”超链接,如果存在)。在提交的每个页面上,我都会将其超时为 5 秒。

我在 Firefox Web 控制台中执行了这段代码,它成功运行并获取了第一页结果,然后提交了页面,下一页也加载了。但是,问题是,一旦提交页面,脚本就会停止。即使在下一页加载后如何连续运行此脚本?有没有其他方法可以实现这个功能?

var inc=0;
var ids;
var main=function(){
console.log("attempiting..............."+inc);
var i=0;
{
    ids[inc]=b();//function, fetch the items from the page
    console.log(ids);
    var more=document.getElementById("m_more_item");
    if(more){
        //next link is there
        var cli=more.getElementsByTagName("a");
        console.log("navigating to next page "+cli[0]);
        inc++;
        setTimeout(main,5000); //I tried placing this after click, but didnt work!
        cli[0].click(); //submitting...
    } else {
        //last page reached, exiting...
        console.log("exit1-> total items fetched are: "+ids);
        return ids;
    }
}
};
main();

【问题讨论】:

  • Javascript 是一种嵌入在您的 HTML 页面中的客户端语言。当您切换到另一个页面时,正在运行的脚本被取消。运行以前网站的 js 脚本会有点傻。您可以使用查询参数,使用服务器端语言处理这些参数,并使用这些参数来模拟脚本的恢复。
  • 如果您能更清楚地解释您想要做什么,我们可以提供帮助。但据我了解,您可以使用同步 AJAX 调用。
  • 我要做的就是从网页中获取给定 id 的项目列表,手动执行此操作并聚合它们需要很长时间。该网页不会在一次提取中列出项目,而是在分页中列出。我有一组 ids[],我用每个 ids[i] 作为请求参数调用网页 url,响应(在 html 中)将是第 10 个项目(对于这个 ids[i]),解析,迭代它们,准备接下来,数据调用相同的 url,并带有用于分页的附加参数,&start=10 等等,直到最后一页。(我通过缺少“下一个”链接来识别最后一页)。我对列表中的所有 id 重复此过程。
  • 是的,我同意,我将使用 ajax 重新编码。获取要解析的 div 或 IFRAME 中的响应 html。我欢迎任何其他简单和更好的想法。 :-)

标签: javascript firefox dom-events settimeout page-refresh


【解决方案1】:

setTimeout 调用使您的函数递归并保持循环这应该可以工作。

setTimeout(cli[0].click, 5000);

干杯。

编辑: 评论很长,所以我将其添加为答案。

您可以在单独的页面中使用 AJAX 调用,首先使用 start=1 调用带有 AJAX 的页面,并在此请求成功后解析数据并根据需要收集信息,不要忘记为您的下一个请求保留 lastItemIndex 并发布关于第二个 AJAX 调用成功的另一个 AJAX 调用需要的信息,第一个调用 start=lastItemIndex+1。

这些调用应该做你想做的事。

我建议为此使用 jQuery,因为它可以很容易地调用 AJAX 并解析响应。

【讨论】:

  • click触发后,脚本将停止运行。
  • 这就是网页的工作方式,提交/加载页面会停止一切。
猜你喜欢
  • 2014-06-20
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多