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

时间:2016-08-30 05:15:16

标签: javascript jquery

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

$.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()循环之外的数据时,我不能。我的变量在全局范围内定义。当我试图为了调试而警告时(输出1。排名)。

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.
    });
  

无法读取未定义的属性'Rank'。

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

1 个答案:

答案 0 :(得分:1)

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

加载功能是异步调用。你处于竞争状态。

我打赌如果你在<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.0.M0</version> </plugin> 行以及output[i] = {行上设置一个断点,你将首先点击警告。