1

我有一个小问题。我从$.get()jQuery 请求中获得了 json 数据

这是输出:

[
    {"name":"Silver","price":525,"per_month":"20","first_invoice":"20"},
    {"name":"Gold","price":500,"per_month":"50","first_invoice":"0"},
    {"name":"Avion","price":750,"per_month":"10","first_invoice":"10"}
]

我尝试为每个对象生成一个带有 LI 的 UL ......

我写了这个小代码:

//send get request
    $.get(
        url, 
        { 'dst': dst, 'price':price },
        function(data) {

            var objects = jQuery.parseJSON(data);

            var items = [];

            jQuery.each(objects, function(){
                console.log(this);

                items.push('<li id="' + this.name + '">' + this.price + '</li>');
            }); 

            jQuery('<ul/>', {
                'class': 'my-new-list',
                html: items.join('')
            }).appendTo('#results');                
        }
    );

当我使用console.log()每个对象时,萤火虫都会记录:没有错误......它可以工作。

这是items.push()andappendTo()什么都不会产生...控制台中没有错误...我的#resultsdiv 中没有附加...

我确定我做错了什么。谁能帮我 ?

更新

在 Fabrício Matté(之后回答)的帮助下,问题出在 iframe 上。

jQuery('<ul/>', {
                'class': 'my-new-list',
                html: items.join('')
            }).appendTo(jQuery('body').find('#results'));  

那行得通=)

再见 Stackoverflow 社区

4

2 回答 2

1

编辑:根据 João 的评论,您的原始代码运行良好。确保:

  1. #result当您尝试附加数据时,它在 DOM 中;
  2. jQuery.parseJSON(data)返回一个对象数组;
  3. jQuery 已正确包含,并且在执行该行之前没有语法错误;
  4. 我稍微重写了代码以使其更易于阅读:

    var objects = jQuery.parseJSON(data);
    
    var items = '';
    
    jQuery.each(objects, function(){
        items += '<li id="' + this.name + '">' + this.price + '</li>';
    }); 
    
    jQuery('<ul/>', {
        'class': 'my-new-list'
    }).html(items).appendTo('#results');
    

小提琴


编辑

根据 OP 的评论,您不能使用选择器来选择 an 内部的元素iframe而不引用它的document第一个。以下是我如何使用contents()and find()

//replace the $('iframe') with ID/class selector if possible
jQuery('iframe').contents().find('#results').append(jQuery('<ul/>', {
    'class': 'my-new-list'
}).html(items));

小提琴

请注意iframe,如果文档来自不同的主机、端口或协议,这将不起作用。
同源策略参考

于 2012-09-13T09:35:07.927 回答
0
$('<ul>')
    .addClass('my-new-list')
    .html($.map(objects, function(el) {
        return '<li id="' + el.name + '">' + el.price + '</li>';
    }).join("\n"))
    .appendTo('#results');
于 2012-09-13T09:42:44.663 回答