Javascript 为什么在jquery.each()函数之外看不到我的JS变量?

Javascript 为什么在jquery.each()函数之外看不到我的JS变量?,javascript,jquery,Javascript,Jquery,编辑:我在下面评论的其他用户的帮助下解决了这个问题。 问题是使用jQuery.load()有一个延迟时间。正如下面所指出的,问题在于我们看到的是变量,而不是其中的数据。我对以下问题的解决方案是使用函数稍微调整代码 $.ajax({ url: 'koc-click-tracker-loader.php', data: {url: 'ar'}, dataType: 'html', context: document.body }) .done( function( d

编辑:我在下面评论的其他用户的帮助下解决了这个问题。 问题是使用jQuery.load()有一个延迟时间。正如下面所指出的,问题在于我们看到的是变量,而不是其中的数据。我对以下问题的解决方案是使用函数稍微调整代码

$.ajax({
    url: 'koc-click-tracker-loader.php',
    data: {url: 'ar'},
    dataType: 'html',
    context: document.body })
.done( function( data ) {
    // Same functionality as below
    });
原创帖子: 我试图解析一个包含7列的HTML表

排名|用户名|最高CPM |最近24小时|总点击次数|左侧链接|最后点击次数

然后我尝试将每一行的数据放入一个JSON对象中。但是,当我尝试访问.each()循环之外的数据时,我无法访问。我的变量是在全局范围内定义的。当我尝试进行调试时,为了调试起见,我会发出警报(output.Rank)

无法读取未定义的属性“Rank”

出于某种原因,我的变量不是全局变量。或者我在jQuery中遗漏了一些东西…

这是因为您的$.each()函数在$.load()函数中

load函数是一个异步调用。你处于比赛状态


我敢打赌,如果您在
输出[I]={
行和
警报(输出[0].Rank);
行上放置断点,您将首先点击警报。

警报(输出[0].Rank);
由于您的
输出[0]
元素是
未定义的
-您故意跳过循环中的索引1。在这种情况下,这是正确的。我输入了一个或多个错误。在这种情况下,它似乎是一个副本和许多其他副本。请注意,它不是告诉您
输出
未定义,而是告诉您
输出[1]
是未定义的。在无法提前确定结果时间的情况下,这不是真正的“竞争条件”。我们知道
.load()
callback肯定会在其他代码运行后运行。是的,他正在尝试访问一个尚不存在的对象的属性,因此出现了错误。哇……我意识到这个问题还有很多。
var output = [];
$(function(){
    var output = [];
    $("#_BLANK").load("koc-click-tracker-loader.php #ar_content table", { url: 'ar' }, function() {
        var data = $("#_BLANK table tbody"); i=0;
        data.find('tr').each( function() {
            var $td = $(this).find('td');

            if ( i > 0 ) { // Skip first iteration, has blank data.
            output[i] = {
                Rank: $td.eq(0).text(),
                User: $td.eq(1).text(),
                KocID: $td.eq(1).find('a').prop("href"),
                CPM: $td.eq(2).text(),
                Last24: $td.eq(3).text(),
                TotalClick: $td.eq(4).text(),
                LinksLeft: $td.eq(5).text(),
                LastClicked: $td.eq(6).text() };
                }
            i++;
            });
        // Will Error here as well.
        });
    alert(output[1].Rank); // Errors here.
    console.log("output", output); // Shows all the data properly.
    });