【发布时间】:2010-07-20 16:56:02
【问题描述】:
我正在使用 jQuery 和 JSON 从数据库中提取数据。数据库的每一行都是一个不同的产品,每个产品都有许多与之关联的属性。
我在 js 中尝试做的是为每个包含所有产品属性的产品创建一个命名数组。我知道如何从 JSON 中提取数据。我知道如何构造数组。
我不知道如何动态创建数组名。有人可以帮帮我吗?
我正在尝试根据数据库中的字段来命名数组。在我现有的工作脚本的结构中,它被引用为 data.cssid。我想使用 data.cssid 的值作为数组的名称,然后填充数组。
$.getJSON("products.php",function(data){
$.each(data.products, function(i,data){
var data.cssid = new Array();
data.cssid[0] = data.productid;
...
etc
});
});
我知道上面的代码是完全错误的,但它说明了这个想法。在我声明“var data.cssid”的地方,我想使用data.cssid的实际值作为新数组的名称。
编辑:
我已经尝试过这里提到的方法(eval 除外)。代码如下,与我原来的帖子并没有什么不同,只是我使用的是 Object 构造函数。
$(document).ready(function(){
$.getJSON("productscript.php",function(data){
$.each(data.products, function(i,data){
var arrayName = data.cssid;
obj[arrayName] = new Array();
obj[arrayName][0] = data.productid;
obj[arrayName][1] = data.productname;
obj[arrayName][2] = data.cssid;
obj[arrayName][3] = data.benefits;
alert(obj[arrayName]); //WORKS
alert(obj.shoe); //WORKS WHEN arrayName = shoe, otherwise undefined
});
});
});
非特定 obj[arrayName] 的警报有效,并显示了所有华丽的数组。 但是,当我尝试通过名称 alert(obj.shoe) 访问特定数组时,它仅在 arrayName = shoe 时有效。下一次迭代失败,无法在此函数之外访问。
我希望这有助于澄清问题以及如何解决它。我非常感谢所有的意见,并且正在尝试你们提出的所有建议。
进展(解决方案):
$(document).ready(function(){
$.getJSON("productscript.php",function(data){
$.each(data.products, function(i,data){
var arrayName = data.cssid;
window[arrayName] = new Array();
var arr = window[data.cssid];
arr[0] = data.productid;
arr[1] = data.productname;
arr[2] = data.cssid;
arr[3] = data.benefits;
alert(window[arrayName]); //WORKS
alert(arrayName); //WORKS
alert(shoe); //WORKS
});
});
});
function showAlert() {
alert(shoe); //WORKS when activated by button click
}
感谢大家的意见。
【问题讨论】:
-
为什么?你想用这个变量做什么?
-
您可以使用
eval,但我不会将其作为答案,因为这可能不是一个好主意。例如。eval('var ' + data.cssid + ' = new Array()'); -
我正在尝试在其他脚本中使用每个产品的属性。我最初构建它是为了从 JSON 输出必要的 html。现在我认为我需要让它更灵活,并且正在考虑先构造数组,然后访问数组来构造 html 和公式将是正确的方法。因此,当我为产品“鞋”构建 HTML 时,我会访问数组并将变量插入到我的脚本中。
-
史蒂文,我也看到了那个方法,还读到 eval 是邪恶的,所以我试图避免这种情况。不过,我承认我不知道为什么 eval 是邪恶的。
-
在这里参考你的第二个代码块 - 你试过把“var obj = {};”在您希望它存在的范围内,例如在顶部?否则,您可能只是在每次循环迭代中创建一个新的 obj 变量,然后将其丢弃。
标签: javascript jquery arrays