Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将for循环与jquery中的.each()组合_Javascript_Jquery - Fatal编程技术网

Javascript 将for循环与jquery中的.each()组合

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++) {

我试图在发送查询时在表中显示json数据。请求工作正常,所有内容都显示得很好。但是: jquery抛出一个TypeError:当我试图显示内容时,a是未定义的

第一次加载页面时,内容显示正确,但在通过表单发送另一个请求时拒绝更新。我只想将表行附加到HTML中的表中:

<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