以下代码执行多个ajax调用。我实际上只想要一个电话。
var update = function(){
if(self.origin() && self.destination()){
// AJAX CALL HERE
$.get(something);
}
}
self.origin.subscribe(function() {
update(false);
});
self.destination.subscribe(function() {
update(false);
});
self.origindatetime.subscribe(function() {
update(true);
});
self.returndatetime.subscribe(function() {
update(true);
});
我试过了deferred updates。但没有运气。
如何避免多次ajax调用?
答案 0 :(得分:1)
不要单独订阅每个observable,而是考虑使用计算的observable,只在所有参数符合要求时进行ajax调用(参见示例:避免多个Ajax请求在Tag property )。
以下是基于该示例:
function ViewModel() {
this.origin = ko.observable();
this.destination = ko.observable();
ko.computed(function() {
var params = { origin: this.origin(), destination: this.destination() };
if (params.origin && params.destination) {
$.get(something);
}
}, this).extend({ deferred: true });
}
计算出的observable将评估您的视图模型何时被实例化,然后每当原点或目标发生更改时。
延迟扩展程序仅确保如果您由于某种原因一次更新原点和目的地(例如在另一个函数中),则计算的observable只会被评估一次。