javascript - 在 Knockout.js 中连接 AJAX 调用

标签 javascript ajax knockout.js

如果之前有人问过这个问题,我深表歉意,我已经搜索过了,但我发现很难以搜索友好的方式表达我的问题。我无法从 knockout 文档中弄清楚,但这似乎是一个基本问题。

我有 3 个选择列表和一个 Knockout View 模型。在第一个列表中选择一个值会更新 View 模型中的一个可观察对象。然后我需要创建一个 ajax post,将该值发送到服务器并检索我放入 View 模型中的可观察数组中的值列表,这将依次更新其他 2 个列表。

我很高兴连接到可观察对象并且那部分工作正常,我的问题是如何以及在何处触发 ajax 调用。

如果我在第一个选择的更改事件上触发它,它似乎会导致竞争条件,这意味着它有时会在 View 模型更新之前被调用。我可以在不使用 observable 的情况下触发它,但这似乎不是很厉害。

如果我使用自定义绑定(bind)来检索值,它将导致进行两次 ajax 调用,并且我不能将检索放在一个函数中,因为它需要异步运行(并且它会被调用两次)。

我觉得我需要一些东西来监听可观察对象并触发 ajax 调用,而无需任何视觉元素。

如有任何帮助,我们将不胜感激。

最佳答案

触发应响应 View 模型更改而发生的事情通常通过 subscriptions 起作用在 knockout 中。

function ViewModel() {
    var self = this;

    self.someValue = ko.observable();
    self.otherValue = ko.observable();

    self.someValue.subscribe(function (newValue) {
        // do something with newValue, like an Ajax request.

        // assuming jQuery
        $.get("your/url", {val: newValue})
        .done(function (data) {
            self.otherValue(data);
        })
        .fail(function () {
            alert("could not retrieve value from server");
        });           
    });
}

关于javascript - 在 Knockout.js 中连接 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19268196/

相关文章:

javascript - Ext JS,全局更改网格列配置默认值

jquery - 如何在 JSON 中导航 '['

java - 当 Java 小程序加载失败时我可以捕获事件吗?

javascript - Tealium Javascript 代码扩展如何返回变量

javascript - 将文本框附加到 dojo 中的 div

JavaScript/Ajax NTLM 身份验证

javascript 获取之间的时间

knockout.js - 在 KnockOutJS 中按 ID 查找

javascript - KnockoutJS 在 WordPress 上不起作用?

knockout.js - KnockoutJS bindinghandler with childBindingContext - $data === $parent