Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.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_Html - Fatal编程技术网

Javascript 从外部.js文件动态访问不断变化的变量

Javascript 从外部.js文件动态访问不断变化的变量,javascript,html,Javascript,Html,我对javascript(通常是c++)非常陌生,我认为这个问题对大家来说应该是非常基本的 我有一个脚本,它获取外部.js文件中定义的变量,并使用警报显示它 .html文件中的代码如下所示 <html> <head> <title></title> <script> function addScript(url){ var extScript = document.createElement('script'); e

我对javascript(通常是c++)非常陌生,我认为这个问题对大家来说应该是非常基本的

我有一个脚本,它获取外部.js文件中定义的变量,并使用警报显示它

.html文件中的代码如下所示

<html>
<head>
<title></title>
<script> 

function addScript(url){
    var extScript = document.createElement('script');
    extScript.type = 'text/javascript';
    extScript.src = url;
    extScript.id = 'extScript'

    //If there is already a script with the ID 'extScript'
    //get rid of it
    var headList = document.getElementsByTagName('head');
    var scriptList = headList[0].getElementsByTagName('script');
    for(var i = 0; i < scriptList.length; i++)
    {
        if(scriptList[i].id =='extScript')
        {
            document.getElementsByTagName('head')[0].removeChild(scriptList[i]);
        }
    }

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

}

function newNewChangeMode()
{
    addScript("C:/Users/Suzaku/Documents/Javascript/controller.js");
    alert("Neo controllerMode variable is reading " + controllerMode);
}

</script>
</head>
<body>
<a href="javascript:newNewChangeMode()">Get externally defined mode</a>
</body>
</html>
var controllerMode = 1111;
(就是这样!)

当我单击链接“get External defined mode”(获取外部定义模式)时,我的javascript将运行并正确显示警报。显示“Neo controllerMode变量正在读取1111”

但是,如果我将变量controllerMode的定义(在controller.js中)更改为

,点击save,然后再次单击该按钮(不刷新),它仍然会提醒“Neo controllerMode变量正在读取1111”。而应该说“Neo controllerMode变量正在读取2222”

似乎没有动态添加此脚本。我需要能够在不刷新.html的情况下更改此变量

提前感谢,


Guy

听起来您的浏览器只是在检索缓存的javascript文件。确保直接转到更新的javascript文件(controller.js)并点击F5以确保加载的是新版本,而不是缓存的版本。否则,浏览器将继续将旧的缓存脚本(已定义1111)插入脚本。常见问题

刷新内容而不重新加载html的常用方法是使用ajax,对于您的问题,您可以尝试向javascript文件添加随机GET参数,如“controller.js?”+new Date().getTime();这可以防止caching这将不起作用,因为您的动态脚本是异步加载和执行的。您还应该考虑设置本地主机服务器,这样您就不会遇到对该文件的访问限制。此外,浏览器通常会限制本地文件访问,如果他们/或您允许,您需要使用文件:///前缀。尝试在浏览器中打开C:/Users/Suzaku/Documents/Javascript/controller.js(不应该工作),然后file:///C:/Users/Suzaku/Documents/Javascript/controller.js (应创建警告)“加载重新定义变量的新脚本”不是修改应用程序状态的正确方法。更常见的情况是,应用程序通过HTTP请求请求更新。无需担心,谢谢您的帮助。我已经用AJAX和httprequests指出了正确的方向,并且研究正在进行中。
 var controllerMode = 2222;