将项目推送到ajax请求成功函数中的knockout-observearray

将项目推送到ajax请求成功函数中的knockout-observearray,ajax,knockout.js,wijmo,Ajax,Knockout.js,Wijmo,在我的应用程序中,我想将ajax响应中的项目添加到淘汰的observableArray中。我的html: <select id="mySelect" data-bind="options: MyArray"></select> 在我的脚本中,后面是: $(document).ready(function() { ko.applyBindings(viewModel); $.ajax({ url: "MyUrl", type

在我的应用程序中,我想将ajax响应中的项目添加到
淘汰
的observableArray中。我的html:

<select id="mySelect" data-bind="options: MyArray"></select>
在我的脚本中,后面是:

$(document).ready(function() {
    ko.applyBindings(viewModel);
    $.ajax({
        url: "MyUrl",
        type: "GET",
        success: function () {
            viewModel.MyArray.push('foo');
        }
    });
});
然后什么也没发生。如果我将此代码更改为:

$(document).ready(function() {
    ko.applyBindings(viewModel);
    viewModel.MyArray.push('foo');
});
一切正常。(当然,这只是一个简单的例子)

我怎样才能解决这个问题

任何帮助都将不胜感激

更新:

我犯了一些错误,因为问题是wijmo。它将select更改为div,我必须调用

 $("#mySelect").wijdropdown('refresh');

添加元素后。

更改
$中的
success
参数。ajax
调用
complete
在请求完成时执行,无论成功与否。使用以下代码检查请求的状态,以帮助确定其不起作用的原因:

$(document).ready(function() {
    ko.applyBindings(viewModel);
    $.ajax({
        url: "MyUrl",
        type: "GET",
        complete: function (jqXHR, textStatus) {
            viewModel.MyArray.push('foo');

            window.console.log(jqXHR);
            window.console.log(textStatus);
        }
    });
});
更新:如果这不是问题,请尝试使用以下命令初始化可观察数组:

MyArray: ko.observableArray([])
看这把小提琴:

HTML:


JavaScript:

var viewModel = { MyArray: ko.observableArray() };

$(document).ready(function() {
    ko.applyBindings(viewModel);
    $.ajax({
        url: "http://baconipsum.com/api/?type=meat-and-filler",
        type: "GET",
        success: function (data) {
            for (i = 0; i < data.length; i++)
            {
                viewModel.MyArray.push(data[i]);
            }
        }
    });
});
var-viewModel={MyArray:ko.observearray()};
$(文档).ready(函数(){
应用绑定(视图模型);
$.ajax({
url:“http://baconipsum.com/api/?type=meat-和填充物“,
键入:“获取”,
成功:功能(数据){
对于(i=0;i

这很好用。我的建议是检查网络流量,看看ajax请求是否成功完成。

什么时候创建viewmodel?在
$(document).ready()之前
是否触发了ready事件?是否确实调用了您的
success
?是否触发了
ready
success
我已使用
console.log()检查了它们
正如我在评论
中所写,success
已被触发,因此将其更改为
complete
不会改变任何想法。@MateuszRogulski可能会再试一次以确定吗?如果没有一个JSFIDLE,我想这将很难帮助你进一步…哦。。。忘记了在小提琴中提到jquery和ko。现在更新它。
<select data-bind="options: MyArray"></select>
var viewModel = { MyArray: ko.observableArray() };

$(document).ready(function() {
    ko.applyBindings(viewModel);
    $.ajax({
        url: "http://baconipsum.com/api/?type=meat-and-filler",
        type: "GET",
        success: function (data) {
            for (i = 0; i < data.length; i++)
            {
                viewModel.MyArray.push(data[i]);
            }
        }
    });
});