修改: 我已经在下面评论过的其他用户的帮助下找出了问题。 问题是使用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 ...
答案 0 :(得分:1)
这是因为$ .each()函数位于$ .load()函数内。
加载功能是异步调用。你处于竞争状态。
我打赌如果你在<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.0.M0</version>
</plugin>
行以及output[i] = {
行上设置一个断点,你将首先点击警告。