如何获得LMS初始化以等待ajax调用?

问题描述

我正在更新内部LMS,该内部LMS当前在其SCORM API的强制LMSInitialize()函数的ajax调用中使用已弃用的“ async:false”。目前,浏览器在控制台中对其发出警告,但它可以工作。代码基本上如下:

function LMSInitialize() {

    // Default LMS values for this item
    var params = {
        //etc
    };

    $.ajax({
        type: "POST",url: "ajax_initialize.PHP",data: params,dataType: 'script',async: false,success:function(data) {
            //nothing relevant
        }
    });

    return('true');
}

我知道这将很快完全失效,因此我正尝试将其替换为基于Promise的系统。

function ajaxWrapper(resolution,ajaxType,ajaxUrl,ajaxData,ajaxDataType) {
    window.top.console.log('promise launched at '+Date.Now());
    return new Promise(resolve => {
        $.ajax({
            type: ajaxType,url: ajaxUrl,data: ajaxData,dataType: ajaxDataType,success:function(data) {
                resolve(resolution);
            }
        }); 
    })
}

async function LMSInitialize() {

    // Default LMS values for this item
    var params = {
        //etc
    };

    var commDelay = await ajaxWrapper(1,"POST","ajax_initialize.PHP",params,'script');

    window.top.console.log('promise fulfilled at '+Date.Now());

    return('true');
}

用于兑现承诺的控制台日志正在运行(大约需要4秒钟),但是在SCORM课件放弃等待响应并声明连接失败之前没有运行。为什么在容忍同步ajax的延迟时这种延迟被证明是致命的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)