Javascript 将for循环与jquery中的.each()组合
我试图在发送查询时在表中显示json数据。请求工作正常,所有内容都显示得很好。但是: jquery抛出一个TypeError:当我试图显示内容时,a是未定义的 第一次加载页面时,内容显示正确,但在通过表单发送另一个请求时拒绝更新。我只想将表行附加到HTML中的表中:Javascript 将for循环与jquery中的.each()组合,javascript,jquery,Javascript,Jquery,我试图在发送查询时在表中显示json数据。请求工作正常,所有内容都显示得很好。但是: jquery抛出一个TypeError:当我试图显示内容时,a是未定义的 第一次加载页面时,内容显示正确,但在通过表单发送另一个请求时拒绝更新。我只想将表行附加到HTML中的表中: <table id="table"></table> JS如下所示: for (var id = 0; id < 150; id++) {
<table id="table"></table>
JS如下所示:
for (var id = 0; id < 150; id++) {
showItems(id);
}
function showItems(){
$.each(json.list.item[id], function(i, val) {
var $r = $('<tr>');
var $c = $('<td>').text(i).appendTo($r);
$c = $('<td>').text(val).appendTo($r);
$("#table").append($r);
});
}
for(变量id=0;id<150;id++){
展示项目(id);
}
函数showItems(){
$.each(json.list.item[id],函数(i,val){
变量$r=$('');
var$c=$('').text(i).附录($r);
$c=$('').text(val).appendTo($r);
$(“#表”)。追加($r);
});
}
我很确定这与从for循环传递到each函数的id有关,但我不知道如何解决这个问题。由于JS在for循环中没有块作用域,因此id变量应该可以在$.each()中访问,对吗?
但是我不明白为什么jquery会抛出“a is undefined”错误,并且脚本在重新加载页面之前不会做出反应。我认为可能是未定义变量返回Null,但我不知道是哪个
在这里和网上阅读了大量的答案(还有关于JS变量作用域和闭包的问题),无法找到解决方案
不显示除jquery$S之外的任何未定义变量
非常感谢您的帮助:)
编辑:
id修复没有帮助。下面是整个js代码
$(document).ready(function(){
$("#term").focus(function() {
var full = $("#table > tbody > tr").length? true : false;
if(full == false) {
$("#message").empty();
$("#table").empty();
}
});
var getFood = function(){
var food = $('#term').val();
if(food ==''){
$('#message').html("Ha! We haven't seen you type, so no request! Type something!<hr>");
} else {
$('#message').html("Your information is on its way!<hr>");
$.getJSON("APICALL", function(json){
console.log(json);
for (var id = 0; id < 150; id++) {
showItems(id);
}
function showItems(){
$.each(json.list.item[id], function(i, val) {
var $r = $('<tr>');
var $c = $('<td>').text(i).appendTo($r);
$c = $('<td>').text(val).appendTo($r);
$("#table").append($r);
});
}
});
}
};
$('#search').click(getFood);
});
$(文档).ready(函数(){
$(“#术语”).focus(函数(){
var full=$(“#表>正文>正文”)。长度?真:假;
如果(满==假){
$(“#消息”).empty();
$(“#表”).empty();
}
});
var getFood=function(){
var food=$('#term').val();
如果(食物=“”){
$('#message').html(“哈!我们还没有看到您键入内容,所以没有请求!键入内容!
”);
}否则{
$('#message').html(“您的信息正在发送中!
”);
$.getJSON(“APICALL”,函数(json){
log(json);
对于(变量id=0;id<150;id++){
展示项目(id);
}
函数showItems(){
$.each(json.list.item[id],函数(i,val){
变量$r=$('');
var$c=$('').text(i).附录($r);
$c=$('').text(val).appendTo($r);
$(“#表”)。追加($r);
});
}
});
}
};
$(“#搜索”)。单击(获取食物);
});
当我省略for循环,而只使用:
$.each(json.list.item[0], function(i, val) {
var $r = $('<tr>');
var $c = $('<td>').text(i).appendTo($r);
$c = $('<td>').text(val).appendTo($r);
$("#table").append($r);
});
$.each(json.list.item[0],函数(i,val){
变量$r=$('');
var$c=$('').text(i).附录($r);
$c=$('').text(val).appendTo($r);
$(“#表”)。追加($r);
});
要仅显示第一个对象,它工作正常,不会引发错误。这让我觉得它与for/.each()连接有关
Edit2:解决方案
应用@MM tac在下表中提出的代码,并完美运行:
$.each(json.list.item, function (key, data) {
console.log(key)
$.each(data, function(index, data) {
var $r = $('<tr>');
var $c = $('<td>').text(index).appendTo($r);
$c = $('<td>').text(data).appendTo($r);
$("#table").append($r);
});
});
$。每个(json.list.item、函数(键、数据){
console.log(键)
$。每个(数据、函数(索引、数据){
变量$r=$('');
var$c=$('').text(index).appendTo($r);
$c=$('').text(data).appendTo($r);
$(“#表”)。追加($r);
});
});
您的输入是什么?当前,您正在将“id”传递到函数“showtimes”(实际上没有输入参数)中
遍历代码时,有一个for循环调用函数150次,每次使用不同的索引。但这正是每一种方法的内在目的。json.list.item是如何构造的?如果它是嵌套的,并且在一个数组中循环,这可能会起作用(尽管它的编写方式一开始有点不清楚)
此外,您不需要为$c分配任何内容,因为这些命令正在立即执行追加操作
如果您能让我了解一下您的输入,我可能会为您提供更多帮助。for(var id=0;id<150;id++){
for (var id = 0; id < 150; id++) {
showItems(id);
}
function showItems(id){
$.each(json.list.item[id], function(i, val) {
var $r = $('<tr>');
var $c = $('<td>').text(i).appendTo($r);
$c = $('<td>').text(val).appendTo($r);
$("#table").append($r);
});
}
展示项目(id);
}
功能显示项(id){
$.each(json.list.item[id],函数(i,val){
变量$r=$('');
var$c=$('').text(i).附录($r);
$c=$('').text(val).appendTo($r);
$(“#表”)。追加($r);
});
}
如果您添加函数showItems(id)
而不是函数showItems()
您的每一个()
实际上都会有一些循环。您需要以这种方式为每个对象使用不同的属性:
$.each(json, function (key, data) {
console.log(key)
$.each(data, function (index, data) {
console.log('index', data)
})
})
修复了此代码的问题:
$.each(json.list.item, function (key, data) {
console.log(key)
$.each(data, function(index, data) {
var $r = $('<tr>');
var $c = $('<td>').text(index).appendTo($r);
$c = $('<td>').text(data).appendTo($r);
$("#table").append($r);
});
});
$。每个(json.list.item、函数(键、数据){
console.log(键)
$。每个(数据、函数(索引、数据){
变量$r=$('');
var$c=$('').text(index).appendTo($r);
$c=$('').text(data).appendTo($r);
$(“#表”)。追加($r);
});
});
谢谢大家帮助我。非常感谢。Stackoverflow社区真是太棒了。可能需要添加更多代码。什么线路出错?”在该代码块中甚至没有使用“a”,因此我认为这不是错误所在。请尝试使用
函数showItems(\u id)
和json.list.item[\u id]
我们需要猜测json结构,可能您没有以正确的方式访问数据。它的形式是{“list”:{“item”:[“Text0”,“Text1”,…]},…}
?是的,t