Javascript 当我清楚地看到页面上的元素时,无法确认该元素是否存在

Javascript 当我清楚地看到页面上的元素时,无法确认该元素是否存在,javascript,jquery,html,json,asynchronous,Javascript,Jquery,Html,Json,Asynchronous,我使用的函数利用jQuery从JSON提要获取信息。这里的问题是,从提要中,我必须选择10个在过去一年内满足条件的项(从参数请求开始的310亿毫秒),并且我必须使用插入URL的变量“maxRows”指定要从提要中获得多少结果。这是函数 function topTen(rows) { $.getJSON("http://ws.geonames.org/earthquakesJSON?north=90&south=-90&east=-180&west=180&

我使用的函数利用jQuery从JSON提要获取信息。这里的问题是,从提要中,我必须选择10个在过去一年内满足条件的项(从参数请求开始的310亿毫秒),并且我必须使用插入URL的变量“maxRows”指定要从提要中获得多少结果。这是函数

function topTen(rows) {
    $.getJSON("http://ws.geonames.org/earthquakesJSON?north=90&south=-90&east=-180&west=180&maxRows=" + rows, 
        function(json) {
            var topTen = new Array();
            var now = new Date();
            var i;
            for(i = 0; i < json.earthquakes.length; i++)
            {
                var time = json.earthquakes[i].datetime;
                var then = new Date(time.replace(" ", "T"));
                if(now - then < 31536000000) { topTen.push(json.earthquakes[i].eqid); }
            }
            if(topTen.length >= 10)
            {
                var html = "The Top Ten Earthquakes Of The Past Year<ol>";
                for(i = 1; i <= 10; i++)
                {
                    html += "<li id='number" + i + "' >" + topTen[i - 1] + "</li>";
                }
                html += "</ol>";
                $('#top_ten').html(html);
            }
        });
}
然而,问题是,执行实际工作的函数不受循环的逐行计时的限制,因此在任何函数实际完成和满足循环条件之前,循环本身会运行很多、很多、很多次。所以现在我正试图设计出另一种类似这样的方法

    topTen(rows);
    rows += 10;
    pause(1000);
    topTen(rows);
    rows += 10;
    pause(1000);
    topTen(rows);
    rows += 10;
    pause(1000);
    if(document.getElementById("number10"))
        alert("There's 10!");
    else
        alert("There's not 10!");
暂停基本上就是它听起来的样子,以毫秒为单位。在我复制和粘贴的循环中,对初始日期对象和后期日期对象进行简单比较。这可以防止函数一个接一个地触发,但问题是if条件从未满足。我不知道它是什么,但不管我允许暂停多长时间,getElementById函数似乎永远找不到id为“number10”的元素,即使我在Firebug中可以非常清楚地看到它

由于这个问题,我的浏览器已经崩溃了好几次,我真的很讨厌它。如果有人能找到解决这个问题的办法,甚至能提出一个更简单、更优雅的办法,我将永远感激


PS-我尝试过全局变量和使用递归从回调函数内部调用topTen()并发送更大的“rows”变量,但这些都不起作用,因为回调函数似乎位于自己包含的小世界中,我的javascript其余部分的90%都不存在

您需要等待一个呼叫返回,然后再呼叫。幸运的是,您已经有一个函数被调用并返回。对这个函数做一个简单的修改,就完成了

var topTenList = new Array();


function topTen(rows) {
    $.getJSON("http://ws.geonames.org/earthquakesJSON?north=90&south=-90&east=-180&west=180&maxRows=" + rows, 
        function(json) {
            var now = new Date();
            var i;
            for(i = 0; i < json.earthquakes.length; i++)
            {
                var time = json.earthquakes[i].datetime;
                var then = new Date(time.replace(" ", "T"));
                if(now - then < 31536000000) { topTenList.push(json.earthquakes[i].eqid); }
            }
            if (topTenList.length < 10)
            {
               topTen(rows+10);
               return;
            }
            else
            {
                var html = "The Top Ten Earthquakes Of The Past Year<ol>";
                for(i = 1; i <= 10; i++)
                {
                    html += "<li id='number" + i + "' >" + topTenList[i - 1] + "</li>";
                }
                html += "</ol>";
                $('#top_ten').html(html);
            }
        });
}
var topTenList=new Array();
函数topTen(行){
$.getJSON(“http://ws.geonames.org/earthquakesJSON?north=90&south=-90&east=-180&west=180&maxRows=“+行,
函数(json){
var now=新日期();
var i;
对于(i=0;i因为(i=1;i你这样做是错误的

在再次调用之前,您需要等待一个调用返回。幸运的是,您已经有一个被调用的函数返回。因此,对该函数进行一个简单的更改,您就完成了

var topTenList = new Array();


function topTen(rows) {
    $.getJSON("http://ws.geonames.org/earthquakesJSON?north=90&south=-90&east=-180&west=180&maxRows=" + rows, 
        function(json) {
            var now = new Date();
            var i;
            for(i = 0; i < json.earthquakes.length; i++)
            {
                var time = json.earthquakes[i].datetime;
                var then = new Date(time.replace(" ", "T"));
                if(now - then < 31536000000) { topTenList.push(json.earthquakes[i].eqid); }
            }
            if (topTenList.length < 10)
            {
               topTen(rows+10);
               return;
            }
            else
            {
                var html = "The Top Ten Earthquakes Of The Past Year<ol>";
                for(i = 1; i <= 10; i++)
                {
                    html += "<li id='number" + i + "' >" + topTenList[i - 1] + "</li>";
                }
                html += "</ol>";
                $('#top_ten').html(html);
            }
        });
}
var topTenList=new Array();
函数topTen(行){
$.getJSON(“http://ws.geonames.org/earthquakesJSON?north=90&south=-90&east=-180&west=180&maxRows=“+行,
函数(json){
var now=新日期();
var i;
对于(i=0;i对于(i=1;i嗯…我想我不明白。我试过了。它不起作用。Firebug中的错误表示函数topTen()不存在。相反,它表示topTen(行+10);不是一个函数。是的,topTen是函数和局部变量的名称,我给数组换了一个不同的名称…看看是否行得通。哇。它行得通!我所要做的就是更改函数的名称!我猜它把topTen函数和topTen数组搞混了。我以为解释器能够分辨出不同的名称rence,但我想它没有我想象的那么聪明。或者可能我没有我想象的那么聪明。好吧,不管怎样,它都起作用了!非常感谢你,你刚刚帮我省去了这么多麻烦。嗯……我想我不明白。我试过了。它不起作用。Firebug中的错误说函数topTen()不存在。相反,它说topTen()不存在(第+10行);不是一个函数。是的,topTen是函数和局部变量的名称,我给数组换了一个不同的名称…看看是否行得通。哇。它行得通!我所要做的就是更改函数的名称!我猜它把topTen函数和topTen数组搞混了。我以为解释器能够分辨出不同的名称但是我想它没有我想象的那么聪明。或者我没有我想象的那么聪明。好吧,不管怎样,它都起作用了!非常感谢你,你刚刚帮我省去了那么多头疼。