【发布时间】:2017-02-01 08:51:17
【问题描述】:
这是我想要实现的目标,我将像这样创建数组 json:
[{
"KODE_CLAIM" : "MMKLKKK01",
"DETAILS" : {
"No_SVC" : "1233456789",
"Date_SVC" : "01-01-2016"
}
},
{
"KODE_CLAIM" : "MMKLKKK02",
"DETAILS" : {
"No_SVC" : "1233456789",
"Date_SVC" : "01-01-2016"
}
}]
这是一个嵌套的 JSON,我从 SQL Server 获取数据。这就是我所做的:
exports.reportClaim = function(req, resp) {
var kode_bass = req.params.kode_bass
var tgl_Awal = req.params.tgl_Awal
var tgl_Akhir = req.params.tgl_Akhir
var hddt = []
var details = [];
console.log(kode_bass,tgl_Awal,tgl_Akhir);
db.executeSql("exec NG_CLAIM_REPORT_HD '" + kode_bass + "','" + tgl_Awal + "','" + tgl_Akhir + "'" , function(data, err) {
if (err) {
httpMsgs.show500(req, resp, err);
} else {
for(var i=0;i < data.length; i++){
console.log(data[i].KODE_CLAIM);
hddt.push(data[i].KODE_CLAIM)
db.executeSql("exec NG_CLAIM_REPORT_DT '" + data[i].KODE_CLAIM + "'" , function(data, err) {
if (err) {
httpMsgs.show500(req, resp, err);
} else {
for(var i=0;i < data.length; i++){
console.log(data.length);
hddt[details] = data;
console.log(hddt);
}
};
});
}
httpMsgs.sendJson(req, resp, hddt);
};
});
};
我面临两个问题,首先我无法将数据推送到 hddt[] 数组中,其次我认为回调导致 JSON 已经发送到网页,但是 for 循环延迟了,我认为这是因为回调正确?
当我在这里做第二个循环时:
db.executeSql("exec NG_CLAIM_REPORT_DT '" + data[i].KODE_CLAIM + "'" , function(data, err) {
if (err) {
httpMsgs.show500(req, resp, err);
} else {
for(var i=0;i < data.length; i++){
console.log(data.length);
hddt[details] = data;
}
};
});
控制台中的错误说,“详细信息”未定义 我该如何解决?我还有另一种方法可以在没有回调的情况下执行 SQL Server?以及如何将我的第二个存储过程数据推送到我的数组对象中并将其作为 JSON 返回?
下面是我执行“NG_CLAIM_REPORT_HD”时的SQL数据 KODE_CLAIM 1 CLM/B094/1403/0001 2 CLM/B094/1403/0002
这是我使用参数“CLM/B094/1403/0001”执行“NG_CLAIM_REPORT_DT”时的 SQL 数据
KODE_CLAIM No_SVC Date_SVC
1. CLM/B094/1403/0001 SVC/B094/1401/0026 2014-01-20 00:00:00.000
2. CLM/B094/1403/0001 SVC/B094/1309/0003 2013-09-18 00:00:00.000
当我使用参数“CLM/B094/1403/0002”执行 SP NG_CLAIM_REPORT_DT 时
KODE_CLAIM No_SVC Date_SVC
1. CLM/B094/1403/0002 SVC/B094/1312/0006 2013-12-16 00:00:00.000
2. CLM/B094/1403/0002 SVC/B094/1312/0005 2013-12-16 00:00:00.000
所以我想要的 JSON 数据是:
[{
"KODE_CLAIM" : "CLM/B094/1403/0001",
"DETAILS" : [
{
"No_SVC" : "SVC/B094/1401/0026",
"Tgl_SVC" : "2014-01-20 00:00:00.000"
},
{
"No_SVC" : "SVC/B094/1309/0003",
"Tgl_SVC" : "2013-09-18 00:00:00.000"
}
]
},
{
"KODE_CLAIM" : "CLM/B094/1403/0002",
"DETAILS" : [{
"No_SVC" : "SVC/B094/1312/0006",
"Tgl_SVC" : "2014-01-20 00:00:00.000"
},
{
"No_SVC" : "SVC/B094/1312/0005",
"Tgl_SVC" : "2013-09-18 00:00:00.000"
}
]
}]
【问题讨论】:
-
i cannot push the data into hddt[] array为什么不呢?hddt.push(data[i].KODE_CLAIM)行是否有错误? -
@JaromandaX 抱歉,我添加了更多解释以获得更多详细信息,你能帮帮我吗?
-
那是因为您发布的代码中没有定义名为
details的变量 -
嗨,我检查了你的代码,但看不到
details变量,你在 for 循环中有一个i变量。你也有第一个问题,因为我相信你没有details。 -
我已经更新了我的代码,当我尝试 console.log(hddt) 它让我永远循环,我错过了什么?
标签: javascript arrays sql-server node.js callback