问一个小问题,如何每隔一段时间重新加载一个JS文件。

时间:2022-12-20 15:53:00
做了一个小项目,在项目中需要通过JS处理一些东东。但这个JS文件是由别的文件生成的。我想每隔一段时间重新加载一下这个JS文件,应该怎么做。

大人们帮想想办法,小弟先谢过了。

26 个解决方案

#1


function mm(path)
{
    var e; if(e=document.getElementById("meizz")) e.parentNode.removeChild(e);
    var script= document.createElement("SCRIPT"); script.defer = true;
    script.type="text/javascript"; script.src=path; script.id="meizz";
    document.getElementsByTagName("HEAD")[0].appendChild(script);
}
setInterval("mm('/scripts/abc.asp')", 10000); //10秒运行一次

#2


先谢谢梅大侠。

还有一个问题,我有这样一段代码,总是提示最后那行错误。
document.writeln("<div id='ShowTime'></div>")
var nowDate = new Date();
var ShowTime = document.getElementByID("ShowTime");
ShowTime.text = nowDate.toTimeString();

#3


第一没见过div有text属性(try innerTEXT)

第二没见过toTimeString(try toString)

或许我太孤陋寡闻了

#4


我只是想让ShowTime显示出一段字符串,来验证上面的代码是否刷新了。

#5


DIV在DHTML里确实没有text属性,不过 xxuu503 也说错了一点,innerText (大小写问题)
用 innerHTML 也行呀
至于时间对象的 toTimeString() 是确实有这个方法的,xxuu503 兄弟要查查资料了

#6


用了innerHTML方法也不行,还是提示“对象不支持此属性或方法”

#7


document.getElementByID
==>
document.getElementById  注意大小写呀,兄弟

#8


哭了,又提示“'ShowTime' 为空或不是对象”
怎么回事。

#9


<body><SCRIPT LANGUAGE="JavaScript">
<!--
document.writeln("<div id='ShowTime'></div>");
var nowDate = new Date();
var ShowTime = document.getElementById("ShowTime");
ShowTime.innerHTML = nowDate.toTimeString();
//-->
</SCRIPT>

#10


谢谢老大再次帮忙,你给的代码单独放到一个HTML文件中,没错,可我把
document.writeln("<div id='ShowTime'></div>");
var nowDate = new Date();
var ShowTime = document.getElementById("ShowTime");
ShowTime.innerHTML = nowDate.toTimeString();
这些代码放到js1.js文件中,再按照你给的下面的代码进行测试就出错了。提示就是“'ShowTime' 为空或不是对象”

function mm(path)
{
    var e; if(e=document.getElementById("meizz")) e.parentNode.removeChild(e);
    var script= document.createElement("SCRIPT"); script.defer = true;
    script.type="text/javascript"; script.src=path; script.id="meizz";
    document.getElementsByTagName("HEAD")[0].appendChild(script);
}
setInterval("mm('js1.js')", 10000); //10秒运行一次


怎么回事呀。

#11


问题出在 document.writeln() 上,这个 writeln 和 write 不要乱用,要慎用,因为用不当的话它会覆盖原已经加载的HTML,不过你的问题不是在这里,你看到我给你的例子里<script>里加了一个<body>没有?没有这个标签,单单一个脚本不能构成一个标准的HTML网页,会造成 document 这个对象没被创建,因此也会报错。

至于document.write这个方法我一般都会使用insertAdjacentHTML或者insertBefore或者appendChild或者innerHTML之类的方法,绝少使用.write()

#12


谢谢老大指点,那我要实现上面的方法,在js1.js文件中应该怎么写!

#13


跟老大学习真是长了不少知道。

#14


刚才那段代码我先在要调用的页面里加入了一个<div id="ShowTime"></div>就行了。
然后测试老大给的代码,证明了每隔10秒是刷新了,因为时间变了:)

现在我在“setInterval("mm('js1.js')", 10000); ”里将js1.js文件替换成我要生成js代码的页面,就是WebForm1.aspx。其中WebForm1.aspx.cs中Page_Load方法中我这么写的:

string js = "";
js = js + "function showTime()\n";
js = js + "{\n";
js = js + "var dateNow = new Date();\n";
js = js + "ShowTime.innerHTML += \""+DateTime.Now.ToString()+"\";\n";
js = js + "}\n";
js = js + "showTime();\n";
Response.Write(js);
Response.End();

打开页面浏览,同样每隔10秒钟将时间显示了来了,但是这个时间没有刷新,都是第一次显示的时间。这又是为什么呀。

#15


不让我回复了。
用马甲试试
刚才又试了asp输出的js,asp的代码如下。
<%
response.write"function showTime()"&CHR(10)
response.write"{"&CHR(10)
response.write"ShowTime.innerHTML +="""&now()&""";"&CHR(10)
response.write"}"&CHR(10)
response.write"showTime();"&CHR(10)
%>

测试后还是同asp.net输出js代码一样,显示没有问题,就是时间不刷新。
我想是不是上面那段代码只是把js 加载进来,但并没有在10秒钟再次重新加载呀。

另外还有一个问题就是Meizz写的代码中是在<Head>标记中再加入一个script。那么每隔10秒钟加入一个script,就加载了一段js,是不是停留时间长了之后,那网页里就有很多个<script>了。需不需要到10秒钟后先清空前一个,然后再加载。

我的上面的问题也是由于<script>过多没清空造成的啊。
在直接引用js文件时,那希js输出当前时间。过10秒钟后再刷新,再引用一次js文件,但第一次引用的js并未清空,所以它还继续显示,但由于是使用js方法显示的时间,所以表面看来是每隔10秒显示一次。

但引用aspx或asp文件生成的js文件时,这段js要显示的时间是由aspx或asp输出的时间,相对js文件就是静态的了。过10秒钟后虽然是再次引用了,但前一次引用的js未清空,所以还是显示第一次引用的js,就是那段静态的时间。所以不管在这个页面停留多长时间,它都只显示第一次加载时的时间。

不知道我这么理解的对不对。还请meizz老大指点。谢谢。

#16


“另外还有一个问题就是Meizz写的代码中是在<Head>标记中再加入一个script。那么每隔10秒钟加入一个script,就加载了一段js,是不是停留时间长了之后,那网页里就有很多个<script>了。需不需要到10秒钟后先清空前一个,然后再加载。”

我的代码里不是有 var e; if(e=document.getElementById("meizz")) e.parentNode.removeChild(e); 这么一句代码吗?这不就是清除老的JS标签的吗??

#17


噢。
那就是已经清空了。但代码再次加载时,时间还是没变,又是为什么呢?
是什么原因造成的。难道这么引用它也存在缓存的问题?

#18


遇到老大可不容易。上午刚看完老大讨论FF与IE的好坏,下午就遇到了。借这个机会。就再问老大一个问题。

目前做的项目里用到了.Net写的WebService。需要在客户端使用JS来调用。其中JS代码,是由aspx页面生成的,需要根据不同情况调用不同的WebService,并且要间隔一段时间再次调用WebService,但测试的时候才发现JS调用远程的WebService需要启用IE里的“通过远程访问数据资”的选项,这就出问题了,我不可能要求每一个用户或浏览都去更改IE的设置。所以才想到这个方法。

在服务器端调用WebService并把结果返回给js代码,客户站只需要每过一段时间再次调用aspx生成的js代码,就能达到目的。但又出现了本贴的问题。

我想问老大的就是,就是还采用JS调用WebService,如何避免上面的问题或是还有没有其它的解决办法。

这个问题都困扰我一周的时间了。刚开始没发现问题,现在发现问题了又想不出好的解决办法。真是愁人啊,老大再帮帮忙!谢谢了。

#19


通过JS调用web service一般都是通过 xmlhttp发送XML信息到web service再从得到的返回值分析结果,不过现在的IE已经禁止xmlhttp跨域访问,即向本站点之外的web service请求的时候就会出现这种问题,所以这种问题你可以在服务器端先去调用web service,然后再将结果回传到客户端,你的问题可能是出在缓存上,因为每次请求的JS路径等信息都是相同的,客户端浏览器就会缓存,从而得不到新的数据,不过这也是有解决办法的,你看看CSDN的每个贴子XML后面都挂了一个 temp=..... 这个就是为了避免客户端缓存而做的,你也可以采用:

function mm()
{
    var e; if(e=document.getElementById("meizz")) e.parentNode.removeChild(e);
    var script= document.createElement("SCRIPT"); script.defer = true;
    script.type="text/javascript"; script.id="meizz";
    script.src = "/scripts/abc.asp?temp="+ Math.random();  //看这里
    document.getElementsByTagName("HEAD")[0].appendChild(script);
}
setInterval("mm()", 10000); //10秒运行一次

#20


谢谢老大指点,那abc.asp页面还需要对该参数进行操作吗。

#21


不需要

#22


太感谢老大了。问题解决了。我太爱你了。帮了我这么大忙!哪天请你吃饭!!!


呵呵,还不知道老大哪里人呢。多谢了。今天工作到此结束,下周一再干!!!

我是沈阳的,老大有时间一定来沈阳,我请你吃饭,可别忘了。

#23


meizz(梅花雪) ,你是不是每几分钟就刷一次呀

#24


收藏

#25


长知识

#26


up

#1


function mm(path)
{
    var e; if(e=document.getElementById("meizz")) e.parentNode.removeChild(e);
    var script= document.createElement("SCRIPT"); script.defer = true;
    script.type="text/javascript"; script.src=path; script.id="meizz";
    document.getElementsByTagName("HEAD")[0].appendChild(script);
}
setInterval("mm('/scripts/abc.asp')", 10000); //10秒运行一次

#2


先谢谢梅大侠。

还有一个问题,我有这样一段代码,总是提示最后那行错误。
document.writeln("<div id='ShowTime'></div>")
var nowDate = new Date();
var ShowTime = document.getElementByID("ShowTime");
ShowTime.text = nowDate.toTimeString();

#3


第一没见过div有text属性(try innerTEXT)

第二没见过toTimeString(try toString)

或许我太孤陋寡闻了

#4


我只是想让ShowTime显示出一段字符串,来验证上面的代码是否刷新了。

#5


DIV在DHTML里确实没有text属性,不过 xxuu503 也说错了一点,innerText (大小写问题)
用 innerHTML 也行呀
至于时间对象的 toTimeString() 是确实有这个方法的,xxuu503 兄弟要查查资料了

#6


用了innerHTML方法也不行,还是提示“对象不支持此属性或方法”

#7


document.getElementByID
==>
document.getElementById  注意大小写呀,兄弟

#8


哭了,又提示“'ShowTime' 为空或不是对象”
怎么回事。

#9


<body><SCRIPT LANGUAGE="JavaScript">
<!--
document.writeln("<div id='ShowTime'></div>");
var nowDate = new Date();
var ShowTime = document.getElementById("ShowTime");
ShowTime.innerHTML = nowDate.toTimeString();
//-->
</SCRIPT>

#10


谢谢老大再次帮忙,你给的代码单独放到一个HTML文件中,没错,可我把
document.writeln("<div id='ShowTime'></div>");
var nowDate = new Date();
var ShowTime = document.getElementById("ShowTime");
ShowTime.innerHTML = nowDate.toTimeString();
这些代码放到js1.js文件中,再按照你给的下面的代码进行测试就出错了。提示就是“'ShowTime' 为空或不是对象”

function mm(path)
{
    var e; if(e=document.getElementById("meizz")) e.parentNode.removeChild(e);
    var script= document.createElement("SCRIPT"); script.defer = true;
    script.type="text/javascript"; script.src=path; script.id="meizz";
    document.getElementsByTagName("HEAD")[0].appendChild(script);
}
setInterval("mm('js1.js')", 10000); //10秒运行一次


怎么回事呀。

#11


问题出在 document.writeln() 上,这个 writeln 和 write 不要乱用,要慎用,因为用不当的话它会覆盖原已经加载的HTML,不过你的问题不是在这里,你看到我给你的例子里<script>里加了一个<body>没有?没有这个标签,单单一个脚本不能构成一个标准的HTML网页,会造成 document 这个对象没被创建,因此也会报错。

至于document.write这个方法我一般都会使用insertAdjacentHTML或者insertBefore或者appendChild或者innerHTML之类的方法,绝少使用.write()

#12


谢谢老大指点,那我要实现上面的方法,在js1.js文件中应该怎么写!

#13


跟老大学习真是长了不少知道。

#14


刚才那段代码我先在要调用的页面里加入了一个<div id="ShowTime"></div>就行了。
然后测试老大给的代码,证明了每隔10秒是刷新了,因为时间变了:)

现在我在“setInterval("mm('js1.js')", 10000); ”里将js1.js文件替换成我要生成js代码的页面,就是WebForm1.aspx。其中WebForm1.aspx.cs中Page_Load方法中我这么写的:

string js = "";
js = js + "function showTime()\n";
js = js + "{\n";
js = js + "var dateNow = new Date();\n";
js = js + "ShowTime.innerHTML += \""+DateTime.Now.ToString()+"\";\n";
js = js + "}\n";
js = js + "showTime();\n";
Response.Write(js);
Response.End();

打开页面浏览,同样每隔10秒钟将时间显示了来了,但是这个时间没有刷新,都是第一次显示的时间。这又是为什么呀。

#15


不让我回复了。
用马甲试试
刚才又试了asp输出的js,asp的代码如下。
<%
response.write"function showTime()"&CHR(10)
response.write"{"&CHR(10)
response.write"ShowTime.innerHTML +="""&now()&""";"&CHR(10)
response.write"}"&CHR(10)
response.write"showTime();"&CHR(10)
%>

测试后还是同asp.net输出js代码一样,显示没有问题,就是时间不刷新。
我想是不是上面那段代码只是把js 加载进来,但并没有在10秒钟再次重新加载呀。

另外还有一个问题就是Meizz写的代码中是在<Head>标记中再加入一个script。那么每隔10秒钟加入一个script,就加载了一段js,是不是停留时间长了之后,那网页里就有很多个<script>了。需不需要到10秒钟后先清空前一个,然后再加载。

我的上面的问题也是由于<script>过多没清空造成的啊。
在直接引用js文件时,那希js输出当前时间。过10秒钟后再刷新,再引用一次js文件,但第一次引用的js并未清空,所以它还继续显示,但由于是使用js方法显示的时间,所以表面看来是每隔10秒显示一次。

但引用aspx或asp文件生成的js文件时,这段js要显示的时间是由aspx或asp输出的时间,相对js文件就是静态的了。过10秒钟后虽然是再次引用了,但前一次引用的js未清空,所以还是显示第一次引用的js,就是那段静态的时间。所以不管在这个页面停留多长时间,它都只显示第一次加载时的时间。

不知道我这么理解的对不对。还请meizz老大指点。谢谢。

#16


“另外还有一个问题就是Meizz写的代码中是在<Head>标记中再加入一个script。那么每隔10秒钟加入一个script,就加载了一段js,是不是停留时间长了之后,那网页里就有很多个<script>了。需不需要到10秒钟后先清空前一个,然后再加载。”

我的代码里不是有 var e; if(e=document.getElementById("meizz")) e.parentNode.removeChild(e); 这么一句代码吗?这不就是清除老的JS标签的吗??

#17


噢。
那就是已经清空了。但代码再次加载时,时间还是没变,又是为什么呢?
是什么原因造成的。难道这么引用它也存在缓存的问题?

#18


遇到老大可不容易。上午刚看完老大讨论FF与IE的好坏,下午就遇到了。借这个机会。就再问老大一个问题。

目前做的项目里用到了.Net写的WebService。需要在客户端使用JS来调用。其中JS代码,是由aspx页面生成的,需要根据不同情况调用不同的WebService,并且要间隔一段时间再次调用WebService,但测试的时候才发现JS调用远程的WebService需要启用IE里的“通过远程访问数据资”的选项,这就出问题了,我不可能要求每一个用户或浏览都去更改IE的设置。所以才想到这个方法。

在服务器端调用WebService并把结果返回给js代码,客户站只需要每过一段时间再次调用aspx生成的js代码,就能达到目的。但又出现了本贴的问题。

我想问老大的就是,就是还采用JS调用WebService,如何避免上面的问题或是还有没有其它的解决办法。

这个问题都困扰我一周的时间了。刚开始没发现问题,现在发现问题了又想不出好的解决办法。真是愁人啊,老大再帮帮忙!谢谢了。

#19


通过JS调用web service一般都是通过 xmlhttp发送XML信息到web service再从得到的返回值分析结果,不过现在的IE已经禁止xmlhttp跨域访问,即向本站点之外的web service请求的时候就会出现这种问题,所以这种问题你可以在服务器端先去调用web service,然后再将结果回传到客户端,你的问题可能是出在缓存上,因为每次请求的JS路径等信息都是相同的,客户端浏览器就会缓存,从而得不到新的数据,不过这也是有解决办法的,你看看CSDN的每个贴子XML后面都挂了一个 temp=..... 这个就是为了避免客户端缓存而做的,你也可以采用:

function mm()
{
    var e; if(e=document.getElementById("meizz")) e.parentNode.removeChild(e);
    var script= document.createElement("SCRIPT"); script.defer = true;
    script.type="text/javascript"; script.id="meizz";
    script.src = "/scripts/abc.asp?temp="+ Math.random();  //看这里
    document.getElementsByTagName("HEAD")[0].appendChild(script);
}
setInterval("mm()", 10000); //10秒运行一次

#20


谢谢老大指点,那abc.asp页面还需要对该参数进行操作吗。

#21


不需要

#22


太感谢老大了。问题解决了。我太爱你了。帮了我这么大忙!哪天请你吃饭!!!


呵呵,还不知道老大哪里人呢。多谢了。今天工作到此结束,下周一再干!!!

我是沈阳的,老大有时间一定来沈阳,我请你吃饭,可别忘了。

#23


meizz(梅花雪) ,你是不是每几分钟就刷一次呀

#24


收藏

#25


长知识

#26


up