1

我有一个函数可以调用获取 Json 响应并在 Google Plots 中绘制数据……我每 90 秒执行一次此函数,因此它会使用最新数据更新我的图表……

这很好用,但是每当它正在处理时,它似乎会锁定浏览器几秒钟(甚至加载程序冻结)如果图形部分冻结我没关系,但我不希望加载程序或其他项目冻结我想要 UI在图表更新时仍然有效。

有人可以帮助我,也许我应该改变 $.ajax

这是代码:

function UpdateCharts() {
clearInterval(timerId);
BuildLineChart('power-chart', $('#datePower').val(), '1,28,32');
BuildLineChart('voltagecurrent-chart', currentDate, '13,15,17,5,7,9');
BuildLineChart('phasekw-chart', currentDate, '2,3,4');
BuildLineChart('phasevoltage-chart', currentDate, '13,15,17');
BuildLineChart('phasecurrent-chart', currentDate, '5,7,9,11');
timerId = setInterval(UpdateCharts, 90000);
}


// document ready function
$(document).ready(function() {
setTimeout(UpdateCharts, 5000);
});

构建折线图然后执行此操作:

 function onDataReceived(seriesData) {
            var p = $.plot(placeholder, seriesData.seriesData, options);
        }

        $.ajax({
            url: '/Charts/LineChart?SeriesToGraph=' + dataPoints + '&DatePull=' + chartDate,
            method: 'GET',
            async: false,
            cache: true,
            dataType: 'json',
            beforeSend: function() {
            $("." + placeHold + "-loader").html('<img src="/Assets/images/loaders/circular/066.gif" />');
            },
            complete: function() {
            $("." + placeHold + "-loader").html('');
            },
            success: onDataReceived
        });
4

3 回答 3

9

async: false导致浏览器在继续之前等待请求完成。将其更改为 async: true 并且它不会锁定浏览器。

于 2012-09-13T19:32:55.707 回答
5

你已经async: false设置好了。如果您将其设置为async: true,那么您的 AJAX 请求将异步发生并且不应该冻结您的浏览器。

于 2012-09-13T19:32:55.020 回答
0

你有没有试过

async: true

?

这里。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。

于 2012-09-13T19:35:40.273 回答