我尝试在HTML5画布上绘制形状。这些形状取决于我的数据库中的状态。我做了一个web服务,返回我的形状的状态。那部分有效。但是当我尝试在get的函数部分中使用shape变量时,我的shape变量会被最后一个状态覆盖。
我试图在没有来电的情况下绘制形状并且有效。有人可以告诉我我做错了吗?
for (var i = 0; i < map_json.shapes.length; i++) {
var shape = map_json.shapes[i];//variable
if (!(force && i == active_btn_index) || (i == selected_btn_index)) {
drawShape(
shape.c,
map_btns_context,
(i == active_btn_index || i == selected_btn_index) ? options_active : options
);
if (shape.lotNo != undefined && shape.tc != undefined) {
$.getJSON(site_url + "DesktopModules/DNN.WebAPI/API/Ajax/GetStatus?lotNo=" + shape.lotNo,
function (data, success) {
console.log(shape);
//my shape.tc is always overwritten by the last returned data item
map_btns_context.drawImage(map_type_img[data.status], shape.tc[0] - 12, shape.tc[1] - 12);
}
);
//map_btns_context.drawImage(map_type_img[shape.t], shape.tc[0] - 12, shape.tc[1] - 12);
}
}
body += '<area shape="poly" coords="' + shape.c.toString() + '" onmouseover="updateButtons(' + i + ')" />';//title="Shape ' + (i+1) + '" />';
}
答案 0 :(得分:1)
我认为这种情况正在发生,因为您在循环异步中击中了AJAX。当您的AJAX返回响应时,执行会进一步移动并覆盖最后一项的形状变量。尝试使AJAX同步 。
删除AJAX部分时,脚本以同步方式执行,并且Shape变量始终获取当前值。