我必须将这些数据显示在表格中。每个新日期都显示在新行上,每个金属应该有自己的列。
现在我已成功将数据放入javascript对象我也尝试过map。但问题是在将数据放入其中之后我无法立即访问它返回旧数据或未定义。
我见过其他答案,其中使用了promise方法或延迟或setTimeout。
我试过延迟和超时,但没用。承诺会有效还是有办法?这是我用来将数据放入对象的代码
var strTd = '<td>'+v.LME_S_Cash+'</td><td>style="border-right:1px solid grey">'+v.LME_S_3M+'</td>';
MetalSequence[v.metal_type] = strTd;
metalMap.set(v.metal_type,strTd);
MetalSequence['date'] = v.date;
对象的内容是这样的
{Nickle: "<td>12690</td><td style="border-right:1px solid grey">12730</td>", date: "2018-01-02", Zinc: "<td>3350.5</td><td style="border-right:1px solid grey">3331</td>", Copper: "<td>7115.5</td><td style="border-right:1px solid grey">7160</td>", Tin: "<td>20050</td><td style="border-right:1px solid grey">19950</td>", …}
Aluminum: "<td>2256</td><td style="border-right:1px solid grey">2268</td>"
Copper: "<td>7181</td><td style="border-right:1px solid grey">7228</td>"
Lead: "<td>2544</td><td style="border-right:1px solid grey">2538</td>"
Nickle: "<td>12690</td><td style="border-right:1px solid grey">12730</td>"
Tin: "<td>20160</td><td style="border-right:1px solid grey">20075</td>"
Zinc: "<td>3377</td><td style="border-right:1px solid grey">3351</td>"
date: "2018-01-02"
显示的条目不同,内容也不同。我应该遵循javascript或任何标准的任何专业知识?
这是我的整个代码
var ajaxCall = $.ajax({
url: str_domain + "index.php?q=commodity/get_ajax_data",
jsonp: "callback",
jsonpCallback: 'jsonCallback',
contentType: "application/json",
dataType: "jsonp",
cache: true,
data: {
section: "settlemetDataFilter",
format: "json",
settlementCategory: SETTLEMENT_CHECK,
year: YEAR_CHECK,
month: MONTH_CHECK
}
})
$.when(ajaxCall).then(function(response) {
// ajaxCall.done(function(response) {
// console.log(response);
var tableHead = '<table><thead><th></th>';
var table = '';
var tableSubHead = '<tr><thead><th>Date</th>';
var tableHeadEnd = '</thead><tbody>';
var dateRecord = '';
var metalTypes = [];
var rowSeven = 0;
var totalMetals = {};
var checkedMetalTypes = 0;
var averageArray = [];
var MetalSequence = {};
var preMetalSeq = [];
var metalMap = new Map();
if (response != '' && response != null) {
$.each(response.data, function(k, v) {
if (!(preMetalSeq.includes(v.metal_type))) {
preMetalSeq.push(v.metal_type);
}
})
console.log(preMetalSeq);
$.each(response.data, function(k, v) {
if (SETTLEMENT_CHECK == 'LMESettlement') {
var strTd = '<td>' + v.LME_S_Cash + '</td><td style="border-right:1px solid grey">' + v.LME_S_3M + '</td>';
MetalSequence[v.metal_type] = strTd;
metalMap.set(v.metal_type, strTd);
MetalSequence['date'] = v.date;
if (!(metalTypes.includes(v.metal_type))) {
totalMetals[v.metal_type] = '<td>' + v.LME_S_Cash + '</td><td>' + v.LME_S_3M + '</td>';
metalTypes.push(v.metal_type);
tableHead += '<th colspan="2">' + v.metal_type + '</th>';
tableSubHead += '<th>Cash</th><th>3M</th>';
}
if (dateRecord != v.date) {
dateRecord = v.date;
rowSeven++;
var trRightSequence = '';
console.log(MetalSequence, metalMap);
for (var i = 0; i < preMetalSeq.length; i++) {
trRightSequence += MetalSequence[preMetalSeq[i]];
console.log(preMetalSeq[i]);
}
table += '</tr><tr><td style="border-right:1px solid grey">' + v.date + '</td>' + trRightSequence;
}
}
})
}
tableHead += tableHeadEnd + '</tr></thead>' + tableSubHead + '</thead></tr>';
if (table != '') {
table += '</tbody></table>';
$('#settlement_table').html(tableHead + table);
} else {
$('#settlement_table').html('<p>No Data Available</p>');
}
})
发布于 2018-10-18 09:31:37
你正在preMetalSeq
通过添加的循环处理每次中的所有元素MetalSequence
。我怀疑问题是有一个尚未添加的金属的参考。你应该先添加所有金属,然后再加工preMetalSeq
。
$.each(response.data, function(k, v) {
if (!(preMetalSeq.includes(v.metal_type))) {
preMetalSeq.push(v.metal_type);
}
if (!(metalTypes.includes(v.metal_type))) {
totalMetals[v.metal_type] = '<td>' + v.LME_S_Cash + '</td><td>' + v.LME_S_3M + '</td>';
metalTypes.push(v.metal_type);
tableHead += '<th colspan="2">' + v.metal_type + '</th>';
tableSubHead += '<th>Cash</th><th>3M</th>';
}
var strTd = '<td>' + v.LME_S_Cash + '</td><td style="border-right:1px solid grey">' + v.LME_S_3M + '</td>';
MetalSequence[v.metal_type] = strTd;
metalMap.set(v.metal_type, strTd);
});
$.each(response.data, function(k, v) {
if (SETTLEMENT_CHECK == 'LMESettlement') {
MetalSequence['date'] = v.date;
if (dateRecord != v.date) {
dateRecord = v.date;
rowSeven++;
var trRightSequence = '';
console.log(MetalSequence, metalMap);
$.each(preMetalSeq, function(preMetal) {
trRightSequence += MetalSequence[preMetal];
});
table += '</tr><tr><td style="border-right:1px solid grey">' + v.date + '</td>' + trRightSequence;
}
}
});
https://stackoverflow.com/questions/-100002929
复制相似问题