Javascript在JSON上的每个循环只获取第一个元素?
我使用的是jquerymobile,所以忽略以下一些过度使用的css,它与核心问题无关 我在JSON数据包/javascript对象中的“位置”上循环时遇到问题。我得到了多个“位置”的响应,但似乎不知道如何迭代它们。我的每个循环中的“i”变量对于第一个元素都正常工作,并显示其相应的名称和图像 下面是我的服务器端Django视图(如果您不熟悉Python,则非常直截了当): 我的服务器正在确认请求并返回以下内容: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
"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("...");
});
}
您必须传递回调函数dogetJSON
的引用,而不是调用该函数
如果执行$(“#今晚列表”).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("...");
});
}