使用jQuery加载外部javascript并抑制";主线程上的同步XMLHttpRequest已被弃用…“;

使用jQuery加载外部javascript并抑制";主线程上的同步XMLHttpRequest已被弃用…“;,javascript,jquery,asynchronous,include,Javascript,Jquery,Asynchronous,Include,我已经读了好几篇关于这个话题的帖子,但还没有找到解决办法。我正在使用jQuery设置一个简单的插件,它也依赖于一些其他文件(例如语言文件)。我希望为最终用户提供一个尽可能简单的设置,以便动态加载这些javascript文件。执行此操作时,我可能会遇到主线程上的警告Synchronous XMLHttpRequest已被弃用,因为它会对最终用户的体验造成有害影响。或者我不得不延迟脚本,因为异步调用尚未在需要包含文件内容的位置完成 我尝试了几种方法在不延迟脚本的情况下实现这一点: 尝试1。通过附在身

我已经读了好几篇关于这个话题的帖子,但还没有找到解决办法。我正在使用jQuery设置一个简单的插件,它也依赖于一些其他文件(例如语言文件)。我希望为最终用户提供一个尽可能简单的设置,以便动态加载这些javascript文件。执行此操作时,我可能会遇到主线程上的警告
Synchronous XMLHttpRequest已被弃用,因为它会对最终用户的体验造成有害影响。
或者我不得不延迟脚本,因为异步调用尚未在需要包含文件内容的位置完成

我尝试了几种方法在不延迟脚本的情况下实现这一点:

尝试1。通过附在身体上

$('body', document).append('<script type="text/javascript" src="myfile.js"></script>');
尝试3-使用$.ajax,与$.getScript大致相同

$.ajaxSetup({ async: false });
$.getScript('myfile.js')
    .done(function(script, textStatus) {
        // success code... map variables
    })
    .fail(function(jqxhr, settings, exception) {
        if( window.console ) {
            console.log('error loading the file);
        }
    });
$.ajax({
    url: 'myfile.js',
    dataType: 'script',
    async: false,
    success: function(script, textStatus) {
        // success code... map variables
    }
});
尝试4-使用$.holdReady(),但这似乎无效,因为插件仅在
$(document).ready(function(){$('.myDemo').myplugin();}
中启动

$.holdReady( true );
$.getScript( 'myfile.js', function() {
    // success code.. map variables
    $.holdReady( false );
});

如何附加/包含外部文件而不必延迟脚本,也不必确保未触发警告。这是可能的,还是我要求同时冻结和融化水?

我现在已通过嵌套ajax请求和构建
完成
回调来修复它。我不确定这是否是一个任务这是一种理想的方式,但有两个外部文件(目前),它是可维护的

还有一个缺点:目前插件的每个实例都需要两个文件。因此,还应该实现某种缓存变量,并根据文件是否已经加载,在下一次迭代中是否应该加载它们

欢迎提出其他建议

$.ajax({
    url: 'firstfile.js',
    dataType: 'script',
    success: function() {
        // success code.. map variables
    },
    complete: function() {
        $.ajax({
            url: 'secondfile.js',
            dataType: 'script',
            success: function() {
                // success code.. map variables
            },
            complete: function() {
                // call function to continue the procedure
            }
        })
    }
});

document.write(“”)
是同步的,因此它可以动态添加(在加载期间)并在其他需要的文件之前到达。也就是说,构建过程或libs的异步版本(require/amd)值得更快地创建和加载。如何创建文件的异步版本?基本上,外部文件包含一个带有嵌套数据的变量。例如,语言文件类似于
var translations={myKey:“这是一段文本”,mySecondKey:“其他值”}