Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在页面提交上使用settimeout方法_Javascript_Firefox_Dom Events_Settimeout_Page Refresh - Fatal编程技术网

Javascript 在页面提交上使用settimeout方法

Javascript 在页面提交上使用settimeout方法,javascript,firefox,dom-events,settimeout,page-refresh,Javascript,Firefox,Dom Events,Settimeout,Page Refresh,我需要获取一个列表项目在一个网站,列表中的项目分页风格可用。我将提取每个页面上项目的信息。我使用settimeout(function(){…code…},5000)编写了一个Javascript代码,并在Firefox web控制台中运行此代码。脚本获取页面中的所有项目,完成后,脚本通过执行超链接“next”的click()方法提交页面。这将持续到页面中有“下一个”超链接为止(在最后一页中,只有“上一个”超链接(如果存在)。在每一页提交我超时到5秒 我在Firefox web控制台中执行了这段

我需要获取一个列表项目在一个网站,列表中的项目分页风格可用。我将提取每个页面上项目的信息。我使用
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();

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

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

编辑: 这是一个很长的评论,所以我添加它作为一个答案

您可以在单独的页面中使用AJAX调用,第一次使用start=1的AJAX调用页面,在该请求成功后,根据需要解析数据和收集信息,不要忘记为下一个请求保留lastItemIndex,并在第二次AJAX调用成功后,使用第一次AJAX调用发布所需信息开始=lastItemIndex+1

这些电话应该是你想要的


我建议为此使用jQuery,因为调用AJAX和解析响应很容易。

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