【问题标题】:How to create a JSON array in JQuery?如何在 JQuery 中创建 JSON 数组?
【发布时间】:2012-10-13 16:55:55
【问题描述】:

我想创建一个这样的 JSON 数组:

var ddBasic = [
    { text: "Facebook", value: 1, },
    { text: "Twitter", value: 2, },
    { text: "LinkedIn", value: 3, },
    { text: "Foursquare", value: 4, }
];

我使用的是 last.fm 中的数据,所以应该是这样的:

var tags = [
        { text: "rock", value: "rock", },
        { text: "pop", value: "pop", },
    ];

它需要在末尾有一个逗号,因此ddslick 下拉功能会忽略 imageSrc 和其他可用于下拉的内容,否则会引发此错误:

Uncaught TypeError: Cannot read property 'imageSrc' of undefined

为了将所有内容联系在一起,我有:

$('#tag').ddslick({
    data: tags,
    onSelected: function(selectedData) {}   
});

这是获取标签的函数:

var tags = [];

var getTopTracks = function () {
    $.getJSON(
    settings.PHP_REQUEST_URL, {
        method: "tag.getTopTags",
        api_key: settings.LASTFM_APIKEY,
        format: "json",
    },

    function (data) {
        var limit = 50;

        data.toptags.tag.sort(function (t1, t2) {
            return t2.count - t1.count;
        });

        $.each(data.toptags.tag, function (i, item) {
            if (i > limit) return false;
            console.log(item.name);
            tags.push({
                text: item.name,
                value: item.name
            });
        });
    });
};

// event handlers (load quando o form é invocado só)
getTopTracks();
alert(tags.length);

// define tema para a combobox   
$('#tag').ddslick({
    data: tags,
    onSelected: function (selectedData) {}
});

我怎样才能做到这一点?

【问题讨论】:

  • 你是说逗号可以正常工作?我不明白这会有什么不同。
  • 哦...显然不是逗号,它是我数组中的东西。我正在使用tags.push({"text" : item.name, "value" : item.name}); 推送值 - 这是正确的语法吗?推后长度显示为0,不知道怎么回事。
  • 检查控制台是否有错误...item 是否已定义?
  • @sachleen: 可能,但这意味着有另一个tags 变量隐藏在某个地方(嗯:在哪里?)因为否则push 会抛出类似can not call push on undefined 的东西
  • 已修复,这是因为我试图在 AJAX 完成请求之前获取值。都修好了。非常感谢您的帮助。

标签: jquery arrays json


【解决方案1】:
var tags = []; //initialised tags with length 0
getTopTracks(); //fetching date in background (!)
alert(tags.length); //running while data is still fitched (unless you've a 0ping connection => alerting length 0

在您使用警报时,很可能tags 未填充,因为$.getJSON() 是一个异步 请求,这意味着该请求将在后台处理并继续执行脚本.您必须使用回调方法来填充数组。

This, getJSON, is a shorthand Ajax function, which is equivalent to:
$.ajax({   
   url: url,
   dataType: 'json',
   data: data,
   success: callback
});

http://api.jquery.com/jQuery.getJSON/

//getJSON success callback:
function (data) {
    var limit = 50;

    data.toptags.tag.sort(function (t1, t2) {
        return t2.count - t1.count;
    });

    $.each(data.toptags.tag, function (i, item) {
        if (i > limit) return false;
        console.log(item.name);
        tags.push({
            text: item.name,
            value: item.name
        });
    });
    //alert the length AFTER the tags been pushed
    alert(tags.length);

    // define tema para a combobox   
    $('#tag').ddslick({
        data: tags,
        onSelected: function (selectedData) {}
    });
}

【讨论】:

  • 哦,哇,这是因为我在页面加载时执行此操作,这意味着它会在调用之前加载元素。我如何等到它完成?
  • 您将$.each 之后的代码移动到回调方法中。所以你确保它在数组被填充后被执行。
  • 值没问题,但文本属性显示为未定义:
  • @Can Ürek:嗯,真的跟不上。你介意用一个最小的例子为你的问题写另一个问题吗?
  • 我处理。我的解决方案就是这样。 var json = {}; json [名称] = 值;这对我有用。
猜你喜欢
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 2020-05-10
  • 2013-01-29
  • 1970-01-01
相关资源
最近更新 更多