将项目推送到ajax请求成功函数中的knockout-observearray
在我的应用程序中,我想将ajax响应中的项目添加到将项目推送到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
淘汰
的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]);
}
}
});
});