包含的文件中引发引用错误..除非调用文件包含慢速代码
Reference Errors thrown in included file... unless calling file includes slow code
本周我在清理一些旧的JavaScript代码时,发生了一件有趣的事情。当我取出一些慢代码时,页面开始对通过Ajax调用包含的文件中的代码抛出引用错误。
下面是这个问题的(大大简化的)例子。当直接请求时,第一个文件将正常工作。但是,当通过Ajax调用时,文档就绪事件已经发生,因此内的代码会立即执行。Chrome抛出一个错误,例如:"VM1414:2未捕获引用错误:they_log未定义"
<html>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.js"></script>
<script>
$(document).ready(function() {
they_log("Be alerted");
});
</script>
<!-- Two separate script tags prevent hoisting -->
<script>
function they_log($string) {
console.log($string);
}
</script>
</body>
</html>
但是,如果下面的注释"alert"行被取消注释,则引用错误不会在Chrome或Firefox中抛出(尽管它们仍然会在Safari中出现——除非您让模式对话框打开几秒钟)。
<!doctype html>
<html lang="en">
<head>
<title>Prototype of reference error issue</title>
</head>
<body>
<div id="place" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.js"></script>
<script>
$.get( "http://localhost/path/to/first/file.html", function( data ) {
$("#place").html(data);
});
//alert("I get rid of the reference error");
</script>
</body>
</html>
我的问题是,警报消息(或包含文件中的类似慢代码)如何防止引用错误的发生?
我特别感兴趣的是,无论发生了什么,让代码在没有错误的情况下执行,都可以指望它能始终如一地工作(至少在Chrome和Firefox中),或者是否存在类似竞赛的情况,它可能会间歇性地失败。
我观察到您的alert
在文档就绪之前运行,并且它阻止文档就绪直到警报对话框关闭。Fiddle:https://jsfiddle.net/24pg3yzk/
显示警报对话框时,Ajax请求及其完成处理程序$("#place").html(data);
可能已完成。是的,这是比赛条件。
这是标准行为还是一贯行为?我不知道。我认为这是有道理的,因为警告"对话框是模式窗口——它们阻止用户访问程序界面的其余部分,直到对话框关闭"(来源),但没有从jQuery文档中确认它。
相关文章:
- 从我自己的脚本中包含的Javascript文件中调用一个函数
- 如何使用php在同一文件中调用javascript函数
- 如何在新创建的模块中从Odoo v8中的Javascript文件中调用python函数
- 使用AJAX在单独的文件中调用php函数
- 在 html 文件中调用的 Javascript 文件
- 如何在单独的文件中调用函数 js.
- Meteor-如何从其他JS文件中调用外部类方法
- 在另一个.js文件中调用js函数
- rails4-javascript文件需要调用两次才能工作
- 如何在 js 文件中调用函数
- 在文件中调用函数,而被调用的函数调用第一个文件中的另一个函数
- 使用 AJAX 在 PHP 文件中调用 PHP 方法
- 在 Ajax 中创建 RoR 链接 在 .js.erb 文件中调用
- 使用没有URL的python脚本从网页下载文件,调用onClick函数
- 如果从自己的文件中调用函数,则不会触发 JSON 回调
- 我应该在每个jQuery文件之上调用Parse.initialize()
- 如何在 Chrome 插件的 Manifest.json 文件中调用 Javascript (JS) 代码
- 在 js 文件中调用 JQuery 函数
- 如何从.cs文件中调用.aspx方法
- jquery的getscript()函数在外部文件中调用时在哪里