【问题标题】:How to write an index loop for a json object如何为 json 对象编写索引循环
【发布时间】:2010-10-05 16:17:36
【问题描述】:

我有一个图像更新程序。我正在通过 JSON 加载显示我的图像的完全相同文件/部分。

我想写一个循环遍历一个索引并用它的相等替换每个图像。

这是我的 json 对象中的第一个 div:

[{
  "photo": {
    "position":1,
    "photo_file_size":45465,
    "created_at":"2010-10-05T09:51:13-04:00",
    "updated_at":"2010-10-05T09:52:29-04:00",
    "photo_file_name":"tumblr_l0x861Yc5M1qbxc42o1_400.jpg",
    "is_cropped":true,
    "crop_h":null,
    "photo_content_type":"image/jpeg",
    "id":216,
    "caption":null,
    "crop_w":null,
    "photo_uploaded_at":null,
    "crop_x":null,
    "processing":false,
    "gallery_id":26,
    "crop_y":null
  }
},
...

该 json 对象中的下一个 div 类似于 gallery_photos_attributes_1_id

更新

这是我到目前为止所得到的......但是 load() 方法不能正常工作。我得到一个“只允许请求”

$.getJSON(url, function(data) {
for (var i = 0; i < data.length; i ++) {
  url2 = "/organizations/" + 1 + "/media/galleries/" + 26 + "/edit_photo_captions"
  var image = $("#gallery_photos_attributes_" + i + "_caption");
url_str = image.siblings("img").attr("src").substr(0, str.lastIndexOf("/"));
image.siblings("img").load(url2, image.siblings("img"));
};
})

【问题讨论】:

  • 如果您将“html”替换为 JSON 对象中的 id,会容易得多。有可能改变吗?
  • 我们的想法是分离出隐藏在所有 HTML 中的一些内部细节,以便您的代码可以轻松找到它。因此,您可以按原样保留“html”属性,但 JSON 还应包含带有图像 ID 的“id”属性以及任何其他有用的数据。
  • 你是对的。我让每张照片都成为 JSON 中的对象。现在我得到了未定义的 G 错误。 G is undefined [Break on this error] (function(){var l=this,g,y=l.jQuery,p=...ch(function(){o.dequeue(this,E)})}});

标签: javascript jquery json loops indexing


【解决方案1】:

虽然我不是 100% 正确,但请尝试这段代码。

var url = "/organizations/" + organization + "/media/galleries/" + gallery + "/update_photo_index"
$.getJSON(url, function(data) {
  // the outer is an array, so just loop as usual
  for (var i = 0; i < data.length; i++) {
    // fetch something for the current photo
    var caption = $("#gallery_photos_attributes_"+ data[i].photo.id +"_caption");
    // update source
    caption.siblings("img").attr("src","/path/to/images/"+data[i].photo.photo_file_name+"?c="+parseInt(Math.random()*10000));
    // update caption
    caption.html(data[i].photo.caption);
    // and so on...
  }
});

请记住,在 JSON 中,“[ ... ]”描述了一个数组,而“{ ... }”描述了一个对象。使用数组,您可以像使用其他所有 javascript 数组一样循环。如果你有一个对象,它就像任何其他 javascript 对象一样,其字段可以通过 object.field 或 object['field'] 访问。因此,在 javascript 中使用 JSON 几乎是一件轻而易举的事。

希望对您有所帮助。

【讨论】:

  • 嘿,没有,一直在查看您的代码,但似乎执行attr 并没有真正加载任何新代码或导致图像刷新。它只是用相同的相同属性替换属性。你如何刷新图像?就像路径是一样的,当然,但是我如何让浏览器刷新图像以查看它是否显示。
  • 我修改了代码,通过将随机查询字符串附加到 src url 来强制浏览器刷新图像(被 Web 服务器忽略,这是防止缓存的常用方法)。
  • 聪明!换个URI,我怎么没想到呢?
猜你喜欢
  • 2013-05-12
  • 2018-04-07
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 2013-07-24
相关资源
最近更新 更多