由于其他AJAX请求,setInterval()中的AJAX请求停止工作

时间:2019-01-16 22:46:09

标签: javascript jquery ajax

我有两个AJAX请求。使用$.post(/updatechart, [...])重复触发一个请求(setInterval())。选择下拉菜单中的一项时,将触发第二个($.post(/updateperiod, [...]))。由于第二个请求,如果我多次触发第二个请求,则第一个请求会在一段时间后停止工作。有时,他们俩都停止工作。有人可以告诉我如何解决这个问题吗?

编辑: 停止工作=请求不再发送到服务器

EDIT2 :感谢IcePickle,我解决了该问题。我没有发送对第二个AJAX请求的响应。

var retrieved;
var period_types = {
    week: "Expenses this week",
    month: "Expenses this month",
    year: "Expenses this year"
};

$(document).ready(function(){
    setInterval(function() {
        updateGraph();
    }, 1000);

    $(".dropdown-item").click(function() {
        var new_period = $(this).attr('value');
        $.post("/updateperiod", data = {period: new_period});
    });
});

function updateGraph() {
    $.post("/updatechart", function(response) {
        retrieved = response;
        drawGraph(retrieved);
    });
}

function drawGraph(response) {
    var x_axis = []
    var y_axis = []
    var data = [];
    response.db.forEach(element => {
        x_axis.push(element.amount);
        y_axis.push(element.category); 
    });
    data = [
        {
            type: 'bar',
            y: y_axis,
            x: x_axis,
            orientation: 'h',
            marker: {
                color: 'rgb(33, 40, 109)'
            }
        }
    ];
    Plotly.newPlot('myDiv', data);
    document.getElementById("p1").innerHTML = period_types[response.period];
}

1 个答案:

答案 0 :(得分:0)

您可以在$.post()上添加设置参数,该参数等于$.ajax()方法,您可以在其中设置选项:

settings: {
 "async": "false"
}

因此您可以在页面上发出多个ajax请求。