如何使用jQuery .each()创建JSON数组或对象

时间:2011-07-24 06:02:05

标签: jquery arrays json object each

我见过很多关于如何使用jQuery和.each()来解析json数组的示例。我想要做的是使用.each()函数来创建json。我正在收到用户关于将在ajax调用中使用的文本框的输入以对表进行排序。我使用.each()来查找具有有效输入的所有文本框,然后我想将该数据放入json数据类型并通过ajax将其发送到SQL查询。我不确定我是否想要一个对象与一个数组,并且从我到目前为止解析的数据来看,我的对象似乎并不包含我期望的所有内容。

我已经创建了一个用于存储数据的全局对象,但是当我在数组中看到的所有内容都是parens(),并且对象是大括号{}时,Web上的上一篇文章显示了括号。所以我的全局“对象”(因为我不知道该怎么称[])就像这样:

var jsonFilter = [];

对于.each()函数,它查看用户数据'onkeyup'以过滤列表:

$("input:text[id^='filter']").live({
        focusin: function () {
            currentFilter = $(this).val();
            $(this).removeClass("filter");
            $(this).val("");
        },

        focusout: function () {
            if ($(this).val() == "") {
                // If they gave up focus and didn't type anything in the box, restore the text
                $(this).addClass("filter");
                $(this).val(currentFilter);
            }
        },

        keyup: function () {
            $("input:text[id^='filter']").each(function () {
                if ($(this).val() != "" && !$(this).hasClass('filter')) {
                    //alert("filterBy: " + $(this).attr('id') + "\nfilterValue: " + $(this).val());
                    jsonFilter.push({ filterBy: $(this).attr('id'), filterValue: $(this).val() });
                }
            });
            //alert("Done with .each()");
            filterReport(jsonFilter);
        }
    });

对于输出jsonFilter内容的数组:

function filterReport(_jsonFilter) {
        $("#jsonFilterLength").html(_jsonFilter.length);
        //$("#filterTest").html("");
        for (var i = 0; i < _jsonFilter.length; i++) {
            $("#filterTest").append("Index: " + i + ", filterBy: " + _jsonFilter[i]["filterBy"] + ", filterValue: " + _jsonFilter[i]["filterValue"] + "<br /><br />");
        }
    }

当我在div“#jsonFilterLength”中查看html时,看到长度正在增加,因此它似乎存储了其他数据。但是div“#filterTest”中的html只显示我输入的当前文本框的数据,而不是我期望整个json数组包含的数据,因为我试图同时允许对多个文本输入进行过滤。 / p>

此致 斯科特

3 个答案:

答案 0 :(得分:1)

似乎对我有用。

http://jsfiddle.net/WQjsN/2/

确保清除keyup函数上的jsonFilter变量。

您还可以修改代码,使其更短。

例如

for (var i = 0; i < _jsonFilter.length; i++) {
            var obj = _jsonFilter[i];
            $("#filterTest").append("Index: " + i + ", filterBy: " + obj.filterBy + ", filterValue: " + obj.filterValue + "<br /><br />");
        }

答案 1 :(得分:0)

我并没有真正得到你正在做的事情,但是建立/解析json我建议你使用Douglas Crockford的json2库。

所以基本上你构建了一个Javascript对象来存储你想要发布的数据然后调用:

var jsonToPostToTheServer = JSON.stringify(myDataObjectToPostToTheServer);

PS在任何时候你说“我添加了一个全局对象”你做错了。

答案 2 :(得分:0)

首先,如果我是你,我会使用浏览器中的调试器来查看数组/对象的内容。尝试在IE中使用内置的东西(通过F12键)或firefox中的firebug,您可以轻松设置JavaScript代码的断点并查看正在发生的事情。

至于你的json东西,你应该能够在你想要调用Ajax函数的时候一次性地jsonify你的数组/对象。所以你现在只需要集中精力构建数组/对象