我有一个 a
像这样的标签:
<a class="pull-right" data-bind="click: $root.CheckTimeOut,
attr:{'href': webcontext + 'Reporting/CSVReport?id=' + id() +
'&session=' + $root.user.session() }">Table</a>
当用户点击这个 a
标记然后它会跳转到CheckTimeOut
检查定时器是否已经结束的函数:
self.CheckTimeOut = function(){
$.getJSON(package + "Backend?session="+ self.user.session(), function(result) {
if(result.result){
console.log('Timer is not over');
return true;
}else{
msg.error.timeOut();
return false;
}
})
}
我应该期望后端返回 result = true
then 表示计时器未结束,然后函数CheckTimeOut
应返回 true,以便 'href': webcontext + 'Reporting/CSVReport?id=' + id() + '&session=' + $root.user.session()
将被执行。否则如果后端返回 result = false
然后将出现一条消息错误并且没有任何事情发生。但实际上当后端返回 result = true
, CheckTimeOut
函数只打印console.log,但不返回true。任何人都可以帮助我为什么 CheckTimeOut
函数不返回值?
最佳答案
您的 CheckTimeOut
函数不返回任何内容:它调用一个异步方法,然后退出。您不能从处理结果的回调 传递return true
或return false
,因为它会将值返回给 JQuery,这忽略结果。
您可以更改 getJSON 以进行同步调用,但这不推荐并且在 JQuery 中被弃用,因为它会导致阻塞调用。
有很多方法可以解决这个问题,您可以将 URL 保存在您的 knockout 模型中,并且当 .getJSON 调用执行时,如果回调返回正确的 true/false 值,则使用 window.location = newURL 进行导航;
关于javascript - knockout 回归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450388/