0

我尝试在 HTML5 画布上绘制形状。这些形状取决于我的数据库中的状态。我访问了一个 Web 服务,它返回我的形状的状态。那部分有效。但是当我尝试在 get 的函数部分使用 shape 变量时,我的 shape 变量会被最后一个状态覆盖。

我试图在没有 get 调用的情况下绘制形状,这很有效。有人可以告诉我我做错了什么吗?

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) + '" />';
        }
4

1 回答 1

1

我认为这是因为您在一个循环中异步点击 AJAX 。当您的 AJAX 返回响应时,执行会进一步移动并用最后一项覆盖您的形状变量。尝试使 AJAX同步命中。

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

于 2013-09-27T12:40:26.543 回答