knockout.js 如何在KnockoutJS组件函数中返回 AJAX 调用的响应?

fnx2tebb  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(117)

我运行一个小Magento商店,并希望扩展我的Checkout与一些功能. Magento使用KnockoutJS,我想扩展KnockoutJS组件与一个简单的函数,返回或真或假取决于 AJAX 调用的响应:

isEnabled: function () {
    var result = false;
    $.getJSON('/mycontroller/checkEnabled', function(response) {
        // response from the controller is simply "true" or "false", in this case "true"
        result = response
    })
    return result
}

不幸的是,即使getJSON的响应是“true”,它也总是返回false。我认为这是因为 AJAX 调用是异步的,并且return result被立即执行,而不是等待AJAX完成。
我已经在谷歌上搜索了如何解决这个问题,并在过去的几个小时里尝试了无数不同的解决方案,async / await、promises、callback(来自here),但我就是不明白如何在 AJAX 调用完成后将响应值返回到我的isEnabled函数中。
这真的让我头疼,因为到目前为止我只有同步编程语言的经验。
如何使isEnabled只返回getJSON AJAX 调用的布尔值?

mqkwyuun

mqkwyuun1#

我会把两者分开。
1.具有表示当前状态的isEnabled属性
1.以及从服务器检索必要数据以确定Enabled状态并在返回promise时设置isEnabled可观察值的函数。
就像这样。
第一个

相关问题