反复快速刷新页面造成浏览器假死!高分求解!!!

imeyang 2007-07-21 10:58:36
一个天气小偷程序,一个JS文件,当页面第一次打开时很正常,可以异步读取,并显示“正在加载......”,当快速重复刷新两次后,浏览器就假死了,一直等天气小偷程序加载完才正常显示页面。
这到底是什么原因呢?

这是js文件
var xmlHttp;
function createXMLHttpRequest(){
if(window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}
else if(window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest();}
}
//开始函数
function startRequest(){
createXMLHttpRequest();
//创建一个新的http请求,并指定此请求的方法、URL以及验证信息
xmlHttp.open("GET", "ajax/weather.asp?types=text" + (new Date().getTime()), true);
//指定当readyState属性改变时执行的函数
xmlHttp.onreadystatechange = handleStateChange;
//发送请求到http服务器并接收回应
xmlHttp.send(null);
}
//让FireFox兼容IE的outerHTML属性
var setOuterHtml = function(s){
var range = this.ownerDocument.createRange();
range.setStartBefore(this);
var fragment = range.createContextualFragment(s);
this.parentNode.replaceChild(fragment, this);
};
if(window.HTMLElement) {
HTMLElement.prototype.__defineSetter__("outerHTML", setOuterHtml);
}
//状态改变时执行的函数
function handleStateChange(){
//4 数据接收完毕 200 返回请求状态为OK
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
document.getElementById("weaInfo").outerHTML= "<span id='weaInfo' style='color:#000000'>" + xmlHttp.responseText + "</span>";
weatherImgs();
}else{
document.getElementById("weaInfo").outerHTML= "<span id='weaInfo' style='color:#FF0000'> Sorry!信息获取失败!</span>";
}
}else{
document.getElementById("weaInfo").outerHTML = "<span id='weaInfo' style='color:#999999'>正在加载天气数据…</span>";
}
}


这是asp小偷程序
<%
'禁止缓存页面
response.expires = 0
response.expiresabsolute = now() - 1
response.addHeader "pragma","no-cache"
response.addHeader "cache-control","private"
Response.cachecontrol = "no-cache"
on error Resume Next
Server.ScriptTimeOut=999
Function getHTTPPage(Path)
t = GetBody(Path)
getHTTPPage=BytesToBstr(t,"GB2312")
End function
Function GetBody(url)
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "get", url, False, "", ""
.Send
GetBody = .ResponseBody
End With
Set Retrieval = Nothing
End Function
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
Function Newstring(wstr,strng)
Newstring=Instr(lcase(wstr),lcase(strng))
if Newstring<=0 then Newstring=Len(wstr)
End Function
%>
<%
Dim wstr,str,url,start,over,dtime
url="http://weather.tq121.com.cn/mapanel/index1.php?city=%C0%D6%C7%E5"
wstr=getHTTPPage(url)
'开始位置
start=instr(wstr,"<hr width=""100%"" size=""1"">")
'结束位置
finish=instrrev(wstr,"<hr width=""100%"" size=""1"">")
body=mid(wstr,start,(finish-start))
body=replace(body,"../images/","http://weather.tq121.com.cn/images/")
body=replace(body,"<hr width=""100%"" size=""1"">","")
'根据类型输出
if request("types")="text" then
'文字部分1
textstart1=instr(body,"class=""weather"">")
wea1=mid(body,(textstart1+16),80)
textfinish1=instr(wea1,"</td>")
wea1=mid(wea1,1,(textfinish1-1))
'判断是否用js接收
if request("js")="yes" then
response.write("document.write('")
end if

'文字部分2
textstart2=instr(body,"class=""weatheren"">")
wea2=mid(body,(textstart2+18),80)
textfinish2=instr(wea2,"</td>")
wea2=mid(wea2,1,(textfinish2-1))
'将小的温度换排前面
wea2ayy=split(wea2,"~")
wea2=wea2ayy(1)&"~"&wea2ayy(0)

'显示
response.write (wea1)
'空一格
response.write("  ")
response.write (wea2)

'判断是否用js接收
if request("js")="yes" then
response.write("');")
end if
end if
%>


另,我是在另一个页面中直接用startRequest();来调用显示天气情况的。也就是在这个页面里刷新的话就会假死了!
如果天气只快速显出来不会假死,如果显示状态是“正在加载...”,此时只要一刷新就会假死了!
...全文
663 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
syfsz 2007-07-27
  • 打赏
  • 举报
回复
在JS里添加一个变量来判断,禁止频繁刷新
imeyang 2007-07-26
  • 打赏
  • 举报
回复
有人说是内存泄露问题?那如何防止呢?
imeyang 2007-07-26
  • 打赏
  • 举报
回复
再顶最后一次了!
imeyang 2007-07-24
  • 打赏
  • 举报
回复
还有其它解答吗?
imeyang 2007-07-23
  • 打赏
  • 举报
回复
又没人来?难道大家都没有遇到过这种问题吗?
yiller 2007-07-23
  • 打赏
  • 举报
回复
用APPLICATION变量锁可以吧~~~
imeyang 2007-07-22
  • 打赏
  • 举报
回复
顶一下,没人解答吗?
hm7921936呢??????
imeyang 2007-07-21
  • 打赏
  • 举报
回复
变量加在哪里呢?ASP里还是JS里?????具体怎么弄?
hm7921936 2007-07-21
  • 打赏
  • 举报
回复
我 也遇到过.
加一个 变量进行状态判断吧
保证执行完一次, 才能执行下一次 操作.
我就是这么处理的
孤剑 2007-07-21
  • 打赏
  • 举报
回复
我也遇到了,但是不是asp的,是.net 下,连接oracle执行 sql 时超常等待。一直停止响应。应该是http 连接的问题,
看你的程序是一个ajax 搞一个连接,点击N次后[特别是xp,有连接限制 10],所以你再开其它的页面就是:服务器连接用户太多,。。。。

52,782

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧