Javascript 使用来自服务器的数据填充ObservalArray后,打印饼图已清除

Javascript 使用来自服务器的数据填充ObservalArray后,打印饼图已清除,javascript,jquery,ajax,knockout.js,flot,Javascript,Jquery,Ajax,Knockout.js,Flot,我正在使用knockout.js2.1和jquery.flot0.7。我遇到的问题非常奇怪,我无法在JSFIDLE上复制它。不过,我会尽力解释(希望这就足够了) 因此,我有一个容器,我正在将我的ko视图模型绑定应用到该容器。在该视图模型中,我有ko.observearray,其中使用“$.ajax”填充了来自服务器的数据。在tat容器中,我还有一个饼图(如果我没有进行ajax调用,或者只是没有用数据填充ko.observearray,这个饼图就可以正常工作) 饼图: <div id="as

我正在使用knockout.js2.1和jquery.flot0.7。我遇到的问题非常奇怪,我无法在JSFIDLE上复制它。不过,我会尽力解释(希望这就足够了)

因此,我有一个容器,我正在将我的ko视图模型绑定应用到该容器。在该视图模型中,我有
ko.observearray
,其中使用“$.ajax”填充了来自服务器的数据。在tat容器中,我还有一个饼图(如果我没有进行ajax调用,或者只是没有用数据填充
ko.observearray
,这个饼图就可以正常工作)

饼图:

<div id="asdasdasd111" style="height: 300px; width: 100%;"></div>

<script>
    $(function () {
        var dasdasdasdadsasdata = [
            { label: "Series1", data: 10 },
            { label: "Series2", data: 30 },
            { label: "Series3", data: 90 }
        ];

        $.plot('#asdasdasd111', dasdasdasdadsasdata, {
            series: {
                pie: {
                    show: true
                }
            }
        });
    });
</script>
所以问题是,当我在
$中使用回调时,这个饼图会被清除:

    $.ajax(
        url: "/api/tools/configurationsections"
        success: callback
    )
但当我这样使用它时,一切都很好:

    callback([1, 4, 5, 8])

    setTimeout( ( => callback([1, 4, 5, 8]) ), 3000 )
我还发现,当我不从服务器遍历数据时,ajax调用的一切都很好——因此,如果从
回调中删除最后一个
for
,一切都很好

请告诉我是什么导致了这个奇怪的问题,因为我已经没有任何想法了

编译的Javascript:

callback = (function(_this) {
          return function(data1) {
            var item, test, _i, _j, _len, _len1, _ref;
            alert("chart exists");
            _this.sections.push(new MyNamespace.MySection({
              DisplayName: data1[0]
            }));
            _this.sections.push(new MyNamespace.MySection({
              DisplayName: data1[1]
            }));
            alert("chart still exists");
            _ref = ["asdasd", "qweqwe"];
            for (_i = 0, _len = _ref.length; _i < _len; _i++) {
              test = _ref[_i];
              _this.sections.push(new MyNamespace.MySection({
                DisplayName: test
              }));
            }
            alert("chart still exists");
            for (_j = 0, _len1 = data1.length; _j < _len1; _j++) {
              item = data1[_j];
              _this.sections.push(new MyNamespace.MySection(item));
            }
            return alert("click Ok to make pie chart disappear =[");
          };
        })(this);
callback=(函数(\u this){
返回函数(数据1){
风险值项目、测试、i、j、len、len1、ref;
警报(“图表存在”);
_this.sections.push(新建MyNamespace.MySection({
DisplayName:data1[0]
}));
_this.sections.push(新建MyNamespace.MySection({
DisplayName:data1[1]
}));
警报(“图表仍然存在”);
_ref=[“asdasd”,“qweqwe”];
对于(_i=0,_len=_ref.length;_i<_len;_i++){
测试=_ref[_i];
_this.sections.push(新建MyNamespace.MySection({
显示名称:测试
}));
}
警报(“图表仍然存在”);
对于(_j=0,_len1=data1.length;_j<_len1;_j++){
项目=数据1[_j];
_this.sections.push(新的MyNamespace.MySection(项));
}
返回警报(“单击确定使饼图消失=[”;
};
})(本条);

我猜来自服务器的数据不是数组。请检查
data1
回调函数中是否包含数组!@nemesv不幸的是,它是数组。奇怪的是,我的图表和分区数组不相关-我有一个表,其中我使用了ko foreach:section(将每个部分显示为一行)。另一件奇怪的事情是,如果我使用简单的折线图而不是饼图,一切都很好。你能在其中复制你的问题吗?我没有为Chrome/IE兼容性设置github资源,所以是Firefox。
callback = (function(_this) {
          return function(data1) {
            var item, test, _i, _j, _len, _len1, _ref;
            alert("chart exists");
            _this.sections.push(new MyNamespace.MySection({
              DisplayName: data1[0]
            }));
            _this.sections.push(new MyNamespace.MySection({
              DisplayName: data1[1]
            }));
            alert("chart still exists");
            _ref = ["asdasd", "qweqwe"];
            for (_i = 0, _len = _ref.length; _i < _len; _i++) {
              test = _ref[_i];
              _this.sections.push(new MyNamespace.MySection({
                DisplayName: test
              }));
            }
            alert("chart still exists");
            for (_j = 0, _len1 = data1.length; _j < _len1; _j++) {
              item = data1[_j];
              _this.sections.push(new MyNamespace.MySection(item));
            }
            return alert("click Ok to make pie chart disappear =[");
          };
        })(this);