javascript - knockout 回归函数

标签 javascript jquery knockout.js

我有一个 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 truereturn false,因为它会将值返回给 JQuery,这忽略结果。

可以更改 getJSON 以进行同步调用,但这不推荐并且在 JQuery 中被弃用,因为它会导致阻塞调用。

有很多方法可以解决这个问题,您可以将 URL 保存在您的 knockout 模型中,并且当 .getJSON 调用执行时,如果回调返回正确的 true/false 值,则使用 window.location = newURL 进行导航;

关于javascript - knockout 回归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450388/

相关文章:

javascript - 使 DIV 从中心 div 向外扩展而不是向内扩展

javascript - 使用 Knockout 嵌套表格

json - 带有嵌套 foreach 循环的 knockout.js

c# - Asp.Net WebApi OWIN 身份验证

javascript - 如何获取html文本框的高亮颜色

javascript - jQuery/JavaScript 验证城市、州 ZIP 单个字段

javascript - 如何为 JavaScript 设置 HttpPost 和 header ?

javascript - 如何获取数组中的对象值

javascript - Bower 镜像仓库

javascript - 目标 Windows、Mac、Linux 等