我在下面显示了一个jQuery脚本。假设获得AWS ML预测并比较分数,并根据分数附加到表中单元格的正确预测。所有这些单元格都具有相同的类prediction
。单击该按钮并触发此脚本后,它可以正确执行所有操作,但是到达附加部分时,它将引发错误,提示Cannot read property 'append' of undefined
。
当我在chrome控制台中运行相同的脚本时,它会正确附加到正确的位置。我不太确定为什么会这样。
$(document).ready(function(){
var highPred="";
$("#predict").click(function(){
var predictionTables = $(".prediction");
for (var i = 0; i < 4; i++) {
var predictedScoresAWS=[];
var params = {
Record: myData[i]
};
machinelearning.predict(params, function(err, data) {
if (err){
console.log(err, err.stack); // an error occurred
} else{
console.log(data); // successful response
// data = $.parseJSON(data);
predictedScoresAWS.push(data.Prediction.predictedScores['Reduce purge history day count']);
predictedScoresAWS.push(data.Prediction.predictedScores['Increase the java heap space']);
predictedScoresAWS.push(data.Prediction.predictedScores['Successful run']);
predictedScoresAWS.push(data.Prediction.predictedScores['Other error']);
console.log(predictedScoresAWS)
var highPredIndex = predictedScoresAWS.indexOf(Math.max(...predictedScoresAWS))
switch(highPredIndex){
case 0:
highPred='Reduce purge history day count';
break;
case 1:
highPred='Increase the java heap space';
break;
case 2:
highPred='Successful run';
break;
case 3:
highPred='Other error';
}
console.log(highPred);
console.log(predictionTables);
console.log(predictionTables[i])
while (predictedScoresAWS.length) { predictedScoresAWS.pop(); }
predictionTables[i.].append(highPred);
}
});
}
});
});
答案 0 :(得分:0)
当将下标与jQuery集合一起使用时,它将返回DOM对象,而不是jQuery对象。您应该使用.eq()
获取jQuery对象,然后才能调用jQuery append()
方法。
predictionTables[i].append(highPred);
应为:
predictionTables.eq(i).append(highPred);
另一个问题是您试图在异步回调中使用迭代变量i
。有关此问题和许多解决方案的问题,请参见JavaScript closure inside loops – simple practical example和Javascript infamous Loop issue?。如果可以使用ES6,只需将var i = 0
更改为let i = 0
。