javascript - 调用 JavaScript setTimeout 未调用 10 次

标签 javascript jquery

我有一个 JavaScript/jQuery 代码函数,如果没有可用数据(由 Web 服务调用确定),该函数应该调用自身最多十次。我已经实现了代码,但 Web 服务调用内的日志记录表明它仅被调用 1 或 2 次。这段代码有什么错误?

 function CallIsDataReady(input) {
            var timer;
            var count = 0;

            $.ajax({
                url: "https://www.blah.com/services/TestsService.svc/IsDataReady",
                type: "GET",
                contentType: "application/json; charset=utf-8",
                data: input,
                success: function (data) {
                    if (!data) {
                        setTimeout(function(inputInner) {
                            CallIsDataReady(inputInner);
                            count++;
                            if (count == 10) {
                                clearInterval(timer);
                                count = 0;
                            }
                        }, 1000);
                    } else {
                        console.log("data returned - returning true");
                        //Continue as data is ready
                        var tableView = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
                        GetDataFromServer(0, tableView.get_pageSize());
                    }
                },
                error: function (jqXHR, textStatus, errThrown) {
                    console.log("AJAX call failed in CallIsDataReady");
                    console.log(errThrown);
                }
            });
        }

编辑:它应该尝试最多十次然后退出,而不是继续访问 GetDataFromServer。它应该返回一个错误。我怎样才能做到这一点

最佳答案

setTimeout 旨在触发函数调用一次,且仅触发一次

如果您希望此功能起作用,请从超时回调中重复调用 setTimeout:

function CallIsDataReady(input) {
    var timer;
    var count = 0;

    function callWebService(){
        console.log('calling webservice');
        $.ajax({
            url: "https://www.blah.com/services/TestsService.svc/IsDataReady",
            type: "GET",
            contentType: "application/json; charset=utf-8",
            data: input,
            success: function (data) {
                console.log('count = ' + count);
                console.log('data = ' + data);
                if (!data){
                    if(count < 10) {
                        count++;
                        setTimeout(callWebService, 1000);
                    } else {
                        count = 0;
                    }
                }else{
                    console.log("data returned - returning true");
                    //Continue as data is ready
                    var tableView = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
                    GetDataFromServer(0, tableView.get_pageSize());
                }
            },
            error: function (jqXHR, textStatus, errThrown) {
                console.log("AJAX call failed in CallIsDataReady");
                console.log(errThrown);
            }
        });
    };

    callWebService();
}

关于javascript - 调用 JavaScript setTimeout 未调用 10 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343079/

相关文章:

javascript - IE 和 Edge 中下拉菜单的黑色边框问题

javascript - 在 javascript/jquery 中加载页面后执行脚本

javascript - 在 html 中显示 javascript 函数输出

javascript - pageshow jquery mobile时激活一个功能

jquery - 拖放图像排序

javascript - 显示加载图像并在页面链接上加载新页面

javascript - 选择的多选在第一次单击时不显示下拉列表

javascript - 为 Grunt 连接服务器配置别名目录

javascript - 为什么 propTypes 存在于类中而不存在于其他方法上?

javascript - 使用 Bacon.js 在延迟为 "pending"时禁用提交按钮