Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript加载另一个js文件_Javascript - Fatal编程技术网

Javascript加载另一个js文件

Javascript加载另一个js文件,javascript,Javascript,我正在尝试从JS文件加载另一个JS文件 从我的JavaScript文件run.js中,我有以下内容: document.write("<script type='text/javascript' src='my_script.js'></script>"); alert(nImages); <SCRIPT language="JavaScript" type="text/javascript"> <!-- nImages = 6; //--> &

我正在尝试从JS文件加载另一个JS文件

从我的JavaScript文件run.js中,我有以下内容:

document.write("<script type='text/javascript' src='my_script.js'></script>");
alert(nImages);
<SCRIPT language="JavaScript" type="text/javascript">
<!--
nImages = 6;
//-->
</SCRIPT>
document.write(“”);
警报(尼美日);
在sidemy_script.js中,我有以下内容:

document.write("<script type='text/javascript' src='my_script.js'></script>");
alert(nImages);
<SCRIPT language="JavaScript" type="text/javascript">
<!--
nImages = 6;
//-->
</SCRIPT>


但是我似乎无法让它从my_script.js文件中提醒
nImages

您不应该在脚本文件中使用HTML。您的脚本文件my_script.js中应该只有这个

nImages = 6;
附加说明:您不需要
language=“JavaScript”
。这些是现代浏览器(甚至IE6)不需要的旧约定。我还避免在JS中使用
document.write()
,因为这会影响性能。您可能希望查看一个库,例如,它提供了一种更好的方式来加载页面中的其他JS文件

我还有一个灵感来自Steve Souders,它通过straight JS加载另一个文件

var theOtherScript = 'http://example.com/js/script.js';

var el = document.createElement('script');
el.async = false;
el.src = theOtherScript;
el.type = 'text/javascript';

(document.getElementsByTagName('HEAD')[0]||document.body).appendChild(el);

这会将另一个脚本附加到元素(如果存在)或页面的。Javascript文件中不应包含HTML。它们应该完全由Javascript代码组成,因此my_script.js应该只包含:

nImages = 6;
这仍然不起作用,因为当您将新的脚本标记写入文档时,它不会立即运行。可以保证
run.js
my_script.js
启动之前完成运行,因此当您发出警报时,
nImages
未定义,然后变为6。您将看到这是有效的:

document.write("<script type='text/javascript' src='my_script.js'></script>");

function call_on_load(){
    alert(nImages);
}
编辑

既然你在评论中说你不能编辑
my_script.js
,你可以这样做,尽管这不是一个很好的解决方案:

// Force nImages to be undefined
var undefined;
window.nImages = undefined;

document.write("<script type='text/javascript' src='my_script.js'></script>");

(function is_loaded(cb){
    if(typeof window.nImages == 'undefined')
        setTimeout(function(){ is_loaded(cb); }, 100);
    else
        cb();
})(function(){
    // This is executed after the script has loaded
    alert(nImages);
});
//强制未定义nImages
var未定义;
window.nImages=未定义;
文件。填写(“”);
(功能已加载(cb){
if(typeof window.nImages==“未定义”)
setTimeout(函数(){is_loaded(cb);},100);
其他的
cb();
})(功能(){
//这是在加载脚本后执行的
警报(尼美日);
});
但是,这不是一个好的解决方案,因为如果加载脚本时出错,它将无限期地继续轮询

编辑

您在注释中发布了要包含的文件,其中包含
,您可以执行以下操作:

var script = document.createElement('script');
script.src = 'my_script.js';
script.type = 'text/javascript';

script.onload = function () {
    alert(nImages);
};

document.getElementsByTagName('head')[0].appendChild(script);

不幸的是,仍然无法修复它,但这是问题的一部分。从技术上讲,它也应该在head@Jay应该是什么,为什么?为了方便地删除或替换脚本,因为您没有为其提供ID。此文件位于外部服务器上,无法更改,有没有一种方法可以在下载时删除它?你不需要等到JS文件被实际加载(除了“它不是HTML文件”部分之外)吗?