Javascript 来自ajax请求的值不可用

Javascript 来自ajax请求的值不可用,javascript,ajax,setinterval,Javascript,Ajax,Setinterval,我在document.onready中有一个函数,它触发ajax请求并在页面上设置隐藏输入的值。我用这种方式设置它,因为我想要在每个页面上发生的事情都是需要的,所以它不是我可以用我的控制器返回的值 接下来,我有一个setInterval,每10秒检查一次这个隐藏输入的值,发出一个ajax请求,看看值是否发生了变化,如果发生了变化,就会在屏幕上使用Toastr显示一条消息(但可能是一个警报或任何东西) 问题是,它在第一次设置隐藏输入的值时显示消息,我认为这是因为这是一个ajax请求,在调用seti

我在document.onready中有一个函数,它触发ajax请求并在页面上设置隐藏输入的值。我用这种方式设置它,因为我想要在每个页面上发生的事情都是需要的,所以它不是我可以用我的控制器返回的值

接下来,我有一个setInterval,每10秒检查一次这个隐藏输入的值,发出一个ajax请求,看看值是否发生了变化,如果发生了变化,就会在屏幕上使用Toastr显示一条消息(但可能是一个警报或任何东西)

问题是,它在第一次设置隐藏输入的值时显示消息,我认为这是因为这是一个ajax请求,在调用setinterval时,该值还不可用,所以第一次将其设为0,以后再将其设为任何值,并将此视为一种改变

这有什么办法吗?代码如下:

    $(document).ready(function(){

        getStartingMissedJobs(); // Sets the value of the hidden input
        var startingMissedJobs = $('#missedJobs').val(); // store that value in a variable

        setInterval(function () {
// here i set the variable to the new value, if it 's changed or keep it..see below
            startingMissedJobs = checkIfNewExpiredJobs(startingMissedJobs);
        }, 10000);
    });
职能:

    var getStartingMissedJobs = function() {
        var localUrl = 'http://mylink.com';

        $.ajax({
            type: "POST",
            url: localUrl + "/actionurl",
            data: {},
            success: function(response) {
                var parsedResponse = JSON.parse(response);
                $('#missedJobs').val(parsedResponse[0]);
             },
             error: function(response){
                console.log(response);
                },
            dataType: 'html',
         });
    };
    var checkIfNewExpiredJobs = function(startingMissedJobs) {
        getExpiredJobs();
        var missedJobs = $('#missedJobs').val();
        if (missedJobs > startingMissedJobs) {
            missedJob();
            return missedJobs;
        }
        return startingMissedJobs;
    };

    $(function() {
        $('.nav-user li').hover(function(){
              $(this).addClass("open");
    }, function(){
        $(this).removeClass("open");
        });
    });
});

    var getExpiredJobs = function() {
        var serverUrl = 'http://contractor.hvac4.us/';
        var localUrl = 'http://fcarranza.contractor.sfdev01.com/';
        var missedJobs; 

        $.ajax({
            type: "POST",
            url: localUrl + "dispatch/newmissed",
            data: {},
            success: function(response) {
                var parsedResponse = JSON.parse(response);
                missedJobs = parsedResponse[0];
                $('#missedJobs').val(missedJobs);
             },
             error: function(response){
                console.log(response);
            },
            dataType: 'html',
         });
        return missedJobs;
    };
谢谢,


fer

您的函数
getStartingMissedJobs
检索并将
missedJobs
输入的值异步设置到代码的其余部分。这意味着:

var startingMissedJobs = $('#missedJobs').val();
将在请求进行时得到评估,因此不太可能得到正确的值

解决此问题的一种方法是将一个回调函数传递给
getStartingMissedJobs
,该函数应在请求完成时调用

然后可以使用该函数为后续检查创建间隔,初始值已经获得

例如:

$(document).ready(function(){
    getStartingMissedJobs(function() {
        var startingMissedJobs = $('#missedJobs').val();
        setInterval(function () {
            startingMissedJobs = checkIfNewExpiredJobs(startingMissedJobs);
        }, 10000);
    });
});


var getStartingMissedJobs = function(callback) {
    ....
    ....
    $.ajax({
        ....
        success: function(response) {
            var parsedResponse = JSON.parse(response);
            $('#missedJobs').val(parsedResponse[0]);
            callback();
         },
         error: function(response){
            console.log(response);
            callback();
         },
         ....

我想给你一个评分,但我还没有分数!这很好,谢谢。我点击了检查按钮,我想就这样??