javascript - jQuery 脚本:我填充了一个数组,但无法从外部访问它
问题描述
我开始摆弄 jquery,我有点发疯了......我正在制作一个小脚本来从一个梦幻足球网站获取足球运动员。我有以下 html 和 JS 可以使用:
<table class="table table-striped">
<thead>
<tr>
<th>Jugador</th>
<th>Equipo</th>
<th>Puntos</th>
</tr>
</thead>
<tbody>
<tr class="jugador">
<td>Sergio-Ramos</td>
<td>Real Madrid</td>
<td></td>
</tr>
<tr class="jugador">
<td>Messi</td>
<td>F.C. Barcelona</td>
<td></td>
</tr>
<tr class="jugador">
<td>Morales</td>
<td>Levante</td>
<td></td>
</tr>
<tr class="jugador">
<td>Bale</td>
<td>Real Madrid</td>
<td></td>
</tr>
</tbody>
</table>
以及以下JS:
<script>
var puntos_jugador = [];
$(".jugador").each(function(index) {
var nombre = $(this).find("td").eq(0).text();
puntos_jugador = puntosJugador(nombre);
console.log(nombre);
console.log(puntos_jugador);
$(this).find("td").eq(2).text("Hola");
});
function puntosJugador(nombre) {
var puntos = [];
$.get('https://www.comuniazo.com/comunio/jugadores/' + nombre, function(response) {
$(response).find('.tr-points, .tr-status').each(function(fila) {
//var jornada = $(this).find("td").eq(0).text();
var puntos_jornada = $(this).find(".bar").text();
puntos.push(puntos_jornada);
//console.log('Jornada ' + jornada + ' ' + puntos);
});
});
return puntos;
}
</script>
问题是 console.log(puntos_jugador) 确实返回了一个填充了信息的数组:
但是我无法访问 puntos_jugador[0] 或尝试 puntos_jugador.toString() 。
谁能告诉我我做错了什么(也许是所有事情)或者给我一些关于如何解决这个问题的指导?
预先感谢并为我的低 JS 水平感到抱歉,我正在努力。
解决方案
您的代码中的问题是您正在执行异步调用,$.get
然后您直接返回结果而不等待响应,这将始终是上面定义的空数组。
您应该等待响应,然后调用回调(或使用承诺)
像这样的东西:
var puntos_jugador = [];
$(".jugador").each(function(index) {
var nombre = $(this).find("td").eq(0).text();
puntosJugador(nombre, function(result) {
console.log('done');
puntos_jugador = result;
console.log(nombre);
console.log(puntos_jugador);
});
$(this).find("td").eq(2).text("Hola");
});
// <---- HERE pass a callback and then call it when you have all results.
function puntosJugador(nombre, cb) {
var puntos = [];
$.get('https://www.comuniazo.com/comunio/jugadores/' + nombre, function(response) {
console.log('response ',response)
$(response).find('.tr-points, .tr-status').each(function(fila) {
//var jornada = $(this).find("td").eq(0).text();
var puntos_jornada = $(this).find(".bar").text();
puntos.push(puntos_jornada);
//console.log('Jornada ' + jornada + ' ' + puntos);
console.log('here', puntos);
});
cb(puntos);
});
}
推荐阅读
- javascript - 将详细信息传递给模态时 id 未定义
- animation - 容器高度动画从中间开始
- node.js - 在nodejs脚本中从shell命令运行casperjs代码时出错
- php - 如果第二个表不匹配连接条件,laravel 从第一个表中获取结果
- postman - 检索和访问字符串化数据
- wordpress - Woocommerce 登录客户 API 端点
- airflow - apache 气流 - 无法加载 dag bag 来处理故障
- mysql - MySQL 是否支持创建隐藏列?
- python - 在 shell 中将“python -m SimpleSTTPServer”的结果传递给管道
- c# - 与旋转的矩形碰撞