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

Ton*_*old 5 javascript jquery

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

$.ajax({
    url: 'koc-click-tracker-loader.php',
    data: {url: 'ar'},
    dataType: 'html',
    context: document.body })
.done( function( data ) {
    // Same functionality as below
    });
Run Code Online (Sandbox Code Playgroud)

原帖: 我试图解析一个包含7列的HTML表

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

然后我试图将每行的数据放入JSON对象.但是,当我尝试访问.each()循环之外的数据时,我不能.我的变量在全局范围内定义.当我尝试,为了调试,警报(输出1 .Rank).

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.
    });
Run Code Online (Sandbox Code Playgroud)

无法读取undefined的属性'Rank'.

同样,由于某种原因,我的变量不是全局变量.或者有一些我缺少jQuery的东西......

小智 1

这是因为您的 $.each() 函数位于 $.load() 函数内部。

加载函数是一个异步调用。你正处于竞赛状态。

我敢打赌,如果你在线上放置一个断点output[i] = {,并且在线上也alert(output[0].Rank);放置一个断点,你将首先触发警报。