AJAX调用会阻止导航到其他页面,直到完成为止

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AJAX调用会阻止导航到其他页面,直到完成为止相关的知识,希望对你有一定的参考价值。

这是我的html5仪表板页面的流程,该页面以异步方式显示多个Google图表。

  1. 为每个图表进行异步AJAX调用以检索数据。
  2. [AJAX调用将调用php文件。
  3. PHP文件从Oracle数据库检索数据。
  4. 当检索到每个图表的数据时,将渲染相应的图表。

这是一个非常酷的仪表板:-)

这里出现问题:当我单击同一页面上的另一个超链接(例如指向“设置”页面的链接)时,浏览器的进度图标旋转,并且直到所有图表都完成加载后,它才导航到新页面。

我认为进行“异步”调用可以使您离开页面。即使所有图表尚未完成加载,我也想离开图表页面。

我正在使用Microsoft IIS作为Web服务器和PHP 7.4。

这是我进行AJAX调用的代码。

function drawChart(chartType, chartDivName, dataFileName, dataFileParam1, dataFileParam2) {
    var chartDiv = document.getElementById(chartDivName);

    // first, display the loading message
    chartDiv.innerHTML = "<img class='img-fluid' src='/images/loading.gif' alt='Loading...'>";

    // get the data asynchronously
    $.ajax({
        url         : dataFileName,
        method      : "POST",
        data        : {param1: dataFileParam1, param2: dataFileParam2},
        dataType    : "JSON",
        async       : true,
        success     : function(data) {
            displayChart (chartDiv, data);
        },
        error       : function(xhr, status, error) {
               chartDiv.innerHTML = "show the error";
        }
    });

} // end drawChart

这就是我调用上述功能的方式:

    drawChart('column', 'monthly-ar-chart', '/ar/chart-data/monthly_ar_totals.php', '', '');
答案

您的$ .ajax调用是通过$(document).ready jquery函数进行的吗?在该上下文中进行的AJAX调用可能会阻止window.load()事件,该事件在初始javascript执行后会触发。尝试使用window.load()而不是document.ready()。

仅供参考-这只是我的最佳猜测。如果您可以与我共享HTML以及函数调用周围的Javascript,我可以做一个更好的猜测。

以上是关于AJAX调用会阻止导航到其他页面,直到完成为止的主要内容,如果未能解决你的问题,请参考以下文章

event.preventDefault 阻止 ajax 调用

JS原生Ajax

数据库调用会在触发器完成之前返回吗?

Ajax POST 到 Laravel API 偶尔会被 CORS 阻止

从根页面导航回选项卡页面会导致奇怪的闪烁

仅使用 CSS 淡出后隐藏元素