javascript - Ajax 响应没有改变我的 View 模型

标签 javascript jquery ajax knockout.js

我绑定(bind)了一个值和一个列表,并希望从 Ajax 回调内部更改它。我在 .get() 中检索了一个新值,但是当我实际发生 .get() 的回调时,我将检索到的值分配给我的 View 模型的属性, UI 不刷新。这是我的代码:

function SearchViewModel() {
    this.count = ko.observable(count);
    this.list = ko.observableArray(list);
    //I had count and list before I assigned.
    this.addPage = function() {
       var form = $('#form');
       var serializedData = form.serialize();
       $.get("{% url 'search:search' %}", serializedData, function(response){
           console.log(this.count); // it's undefined here.
           this.count = response.count;
           console.log(this.count); // it's the value I want to updated, e.g. 20. But UI is not refreshedenter code here
       });
   };
}

我也想在回调中更新列表,但现在即使是简单的 count 值也没有被更新。我在 stackoverflow 上读到了很多相关的解决方案,并尝试了几种,但没有一个起作用。

最佳答案

尝试:

this.count(response.count);

这应该可以解决问题。

有关可观察量的更多信息,请查看 http://knockoutjs.com/documentation/observables.html

您的代码中还存在潜在的范围问题。当您在回调中引用 this 时,不能保证您获得 viewModel 的范围。因此,您应该在回调之外添加此行:

var self = this;

在回调中您应该更改为:

self.count(response.count);

关于javascript - Ajax 响应没有改变我的 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575465/

相关文章:

javascript - 如何将 jQuery Validate 错误消息放在标签后面?

jquery - 将内容从一个隐藏的 div 移动到另一个显示的 div

php - 我想使用 Ajax 将 id 从 View 传递到 Codeigniter 中的 Controller 并更新数据库中的下拉选择

javascript - 如何从异步调用返回响应?

javascript - React - 安装 react 表

javascript - 如何使用 JQuery 和 formData 正确获取表单数据

javascript - JavaScript 中的文件扩展名验证

javascript - 如何对 jQuery 中的选择器返回的值进行折叠?

javascript - 光滑的图像变为 1px 高度

javascript - 如何使用Jquery AJAX获取POST数据