jQuery:调用 $.getJSON 时填充数组时出现问题
jQuery: Problem populating array when calling $.getJSON
这是我尝试创建新的CouchDB文档时使用的代码(参考代码)。该文档包含一个或多个现有的 CouchDB 文档(历史记录跟踪)。新创建的文档生成的 json(参考 JSON)如下所示:
杰森:
{
"_id": "b3360050039389801524044daf1c963c",
"_rev": "1-2a5da40ce9a191b4decc27411ec9a181",
"hodoc_type": "INCOMMING DELIVERY NOTE",
"user_from": "ANS USER",
"status": "INSTALLED ON SITE",
"category": "ASET",
"location": "MTX SPARE",
"doctype": "hodoc",
"items": [
{
"serial_number": "310310007590",
"status": "STORED IN WAREHOUSE",
"doctype": "data",
"supplier": "INTRACOM",
"po": "0",
"category": "SPARE PART",
"user_out": "IGOR JURUKOV",
"mac": "NULL",
"eqtype": "IDU",
"location": "MTX SPARE",
"location_comment": "NULL",
"date_in": "2011-05-06",
"date_out": "2011-05-06",
"prf": "0",
"part_number": "Z00-404/63.01",
"user_in": "KOTE JANAKIEVSKI",
"bar_code": "0",
"manufacturer": "INTRACOM",
"rma": "NULL",
"product_name": "PSU for IDR-SM"
},
{
"serial_number": "310407016955",
"status": "STORED IN WAREHOUSE",
"doctype": "data",
"supplier": "INTRACOM",
"po": "0",
"category": "SPARE PART",
"user_out": "IGOR JURUKOV",
"mac": "NULL",
"eqtype": "IDU",
"location": "MTX SPARE",
"location_comment": "NULL",
"date_in": "2011-05-06",
"date_out": "2011-05-06",
"prf": "0",
"part_number": "Z00-404/63.02",
"user_in": "KOTE JANAKIEVSKI",
"bar_code": "0",
"manufacturer": "INTRACOM",
"rma": "NULL",
"product_name": "PSU for IDR-SM"
}
]
}
法典:
var docids = new Array();
var items = new Array();
$('div#divitemsout').find('img.item-out-remove').each(function () {
var id = $(this).attr('attrid');
if (docids.indexOf(id) == -1) {
docids.push(docid);
}
var item = new Object;
$.getJSON('/whdb/' + id, function(data) {
$.each(data, function(key, val) {
if (key !== "_id" && key !== "_rev") {
item[key] = val;
}
});
// Check No.1
//alert(item.manufacturer);
});
// Check No.2
//alert(item.manufacturer);
items.push(item);
});
问题和问题是:当下面检查 2 行被编码时,生成的 json 文档的"项目"部分是 []。当警报(item.manufacturer)下面的检查2未被注释时,我收到内容为"未定义"的警报,但是生成的json文档的"项目"部分已正确设置,就像示例中所示一样。有什么建议吗?
问题只是时机。在 Web 服务器返回对您的请求的响应之前,不会调用您传递给 getJSON
的函数。因此,item
不会在调用getJSON
后立即定义。添加alert
调用只会减慢速度,以便异步调用有时间完成。
尝试在getJSON
回调中移动items.push(item)
行。
编辑
为了清楚起见,请尝试以下操作(在打开Firebug的Chrome或Firefox中,以便您具有适当的console.log
功能):
var docids = new Array();
var items = new Array();
var waiting = 0;
$('div#divitemsout').find('img.item-out-remove').each(function () {
var id = $(this).attr('attrid');
if (docids.indexOf(id) == -1) {
docids.push(docid);
}
var item = new Object;
waiting++;
$.getJSON('/whdb/' + id, function(data) {
waiting--;
$.each(data, function(key, val) {
if (key !== "_id" && key !== "_rev") {
item[key] = val;
}
});
items.push(item);
if(waiting == 0) {
console.log('items:', items);
}
});
});
- JavaScript/jQuery JSON数组问题-值为未定义
- array_push平面数组问题-需要能够向数组中添加多个变量
- 尽管使用了off,click函数仍会触发,这可能也会导致数组问题
- JavaScript/jQuery悬停函数的行为很有趣——数组问题
- 使用新值更新时出现数组问题
- Javascript 矩阵数组问题
- 对于javascript和jquery的循环数组问题
- 绘制 C3 图表时的 JSON 到数组问题
- Spring 3 中的字符串数组问题
- JavaScript 数组问题
- Javascript图像数组问题
- Javascript数组问题
- 使用JS的数组问题
- 简单的Javascript数组问题
- 在多维数组问题上用javascript实现foreach循环
- 合并并返回唯一数组问题
- Javascript关联数组问题
- ng-repeat声明中的数组问题
- d3.js数组问题:Uncaught TypeError: Cannot read property 'date
- Javascript数组问题:无法读取未定义属性