js变量总是被新值覆盖

时间:2013-09-27 12:30:55

标签: javascript html5 html5-canvas

我尝试在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) + '" />';
        }

1 个答案:

答案 0 :(得分:1)

我认为这种情况正在发生,因为您在循环异步中击中了AJAX。当您的AJAX返回响应时,执行会进一步移动并覆盖最后一项的形状变量。尝试使AJAX同步

删除AJAX部分时,脚本以同步方式执行,并且Shape变量始终获取当前值。