我见过很多关于如何使用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>
此致 斯科特
答案 0 :(得分:1)
似乎对我有用。
确保清除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你的数组/对象。所以你现在只需要集中精力构建数组/对象