Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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在JSON上的每个循环只获取第一个元素?_Javascript_Jquery_Django_Each - Fatal编程技术网

Javascript在JSON上的每个循环只获取第一个元素?

Javascript在JSON上的每个循环只获取第一个元素?,javascript,jquery,django,each,Javascript,Jquery,Django,Each,我使用的是jquerymobile,所以忽略以下一些过度使用的css,它与核心问题无关 我在JSON数据包/javascript对象中的“位置”上循环时遇到问题。我得到了多个“位置”的响应,但似乎不知道如何迭代它们。我的每个循环中的“i”变量对于第一个元素都正常工作,并显示其相应的名称和图像 下面是我的服务器端Django视图(如果您不熟悉Python,则非常直截了当): 我的服务器正在确认请求并返回以下内容: "GET /api/0.1/tonight-mobile.json&call

我使用的是jquerymobile,所以忽略以下一些过度使用的css,它与核心问题无关

我在JSON数据包/javascript对象中的“位置”上循环时遇到问题。我得到了多个“位置”的响应,但似乎不知道如何迭代它们。我的每个循环中的“i”变量对于第一个元素都正常工作,并显示其相应的名称和图像

下面是我的服务器端Django视图(如果您不熟悉Python,则非常直截了当):

我的服务器正在确认请求并返回以下内容:

"GET /api/0.1/tonight-mobile.json&callback=jsonp1293142434434 HTTP/1.1" 200 167
以下是我的回答:

callback({"Places": [{"url": "http://localhost:8000/api/0.1/places/3.plist", 
"image_url": "http://localhost:8000/static/place_logos/Bengals_1.png", 
"name": "Bob's Place", "events": 2}, 
{"url": "http://localhost:8000/api/0.1/places/2.plist", 
"image_url": "http://localhost:8000/static/place_logos/Makonde_Mask.gif", 
"name": "My Bar", "events": 0}, 
{"url": "http://localhost:8000/api/0.1/places/1.plist", 
"image_url": "http://localhost:8000/static/place_logos/Quintons_1.png", 
"name": "Quinton's", "events": 1}]})
------------ 我的getJSON和回调方法已经演变成这样:


函数loadJSON(){
$.getJSON(“http://localhost:8000/api/0.1/tonight-json&callback=?”,callback(数据));
}
函数回调(数据){
$(“#今晚列表”)。每个(数据、位置、功能(i){
$(this).append(“
  • ”+data.Places[i].events+“events
  • ”; }); }
    我是否混淆了每个函数如何迭代JSON(成为)Javascript对象?我很确定每个地方都是我的问题,因为我只得到了“地点”列表的第一个元素。有人能帮我解释一下如何构造循环吗?

    each()
    不是这样工作的。它获取页面上的一组元素,并在其上循环,为每个元素调用一个函数。在本例中,您将在
    $(“#今晚列表”)
    上循环,其中只有一个项目(ID应该唯一标识文档中的一个元素)

    您似乎想做的是循环数据(而不是
    #今晚列表
    元素),然后将数据添加到该元素中,对吗?在这种情况下,您需要普通JavaScript来执行循环,如下所示:

    var list = $("#tonight-list");
    for (var i=0, place; place=data.Places[i]; ++i) {
        list.append("<li role='option' tabindex='" + i + "'>" + place.name + "</li> ...etc);
    }
    
    var list=$(“#今晚列表”);
    对于(变量i=0,位置;位置=数据。位置[i];+i){
    list.append(“
  • ”+place.name+“
  • …等); }

    请注意,我不知道您是否正在加载包含HTML、不受信任的纯文本等的受信任数据。根据您的用例,您可能需要在插入数据之前对其进行编码,或者(更好)以结构化方式插入数据,而不是串接字符串。

    您使用的是
    getJSON
    每个
    的方式都不正确:

    function loadJSON(){
        $.getJSON("http://localhost:8000/api/0.1/tonight-mobile.json&callback=?", callback);
    }
    function callback(data){
        var target = $("#tonight-list");
        $.each(data.Places, function(i) {
            target.append("...");
        });
    }
    
    您必须传递回调函数do
    getJSON
    的引用,而不是调用该函数

    如果执行
    $(“#今晚列表”).each()
    ,则将迭代选择器选择的元素。此函数只接受一个参数(回调)


    您希望以数组为先,回调为第二个参数。

    您可以考虑为您过去的一些问题选择正确的响应。吉姆,谢谢您的响应。很好,我现在明白了这不是处理事情的必要方式。对于JavaScript,我是一个新手,所以我没有想到我可以编写一个原生for循环。:)再次感谢!
    var list = $("#tonight-list");
    for (var i=0, place; place=data.Places[i]; ++i) {
        list.append("<li role='option' tabindex='" + i + "'>" + place.name + "</li> ...etc);
    }
    
    function loadJSON(){
        $.getJSON("http://localhost:8000/api/0.1/tonight-mobile.json&callback=?", callback);
    }
    function callback(data){
        var target = $("#tonight-list");
        $.each(data.Places, function(i) {
            target.append("...");
        });
    }