Ajax运行不稳定,还经常使浏览器死掉

happydaisy1985 2009-09-21 09:34:49
我有一个页面是用Ajax从后台xml文档来取数据的,可是很不稳定,有时候有返回值,有什么却没有,没有返回值的时候浏览器就会卡住,其他的页面也打不开了,浏览器版本IE7.0.
问题1:为什么Ajax不稳定,每次重启tomcat后才会有返回值,运行几次就没有返回值了,还得重启tomcat,难道是缓存的原因?
问题2:就算没有返回值,为什么会卡死浏览器呢?其他的与Ajax无关的页面也打不开了。
大家帮忙看看吧。
...全文
481 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
午夜咖啡男 2009-09-30
  • 打赏
  • 举报
回复
如果你出现浏览器假死的情况,首先,你的Ajax用的是同步还是异步的模式?如果同步的话,服务器死掉了,浏览器也就不懂了因为有返回值了js才会继续往下执行。

如果是异步的,你是不是IE6? IE6的http链接有2个的限制。同一时间如果存在了超过两个以上的xmlhttprequest实例,会导致浏览器崩溃。通常的做法是生命一个全局或者说静态的xmlhttprequest,如果你有多次请求的话,把请求按照任务队列的方式来管理,尽量不要同时创建多个request
蚊子的 2009-09-28
  • 打赏
  • 举报
回复
学习。。。如果执行时间太长的话,出现卡死情况。。。
红街咖啡 2009-09-26
  • 打赏
  • 举报
回复
。。学习。
happydaisy1985 2009-09-25
  • 打赏
  • 举报
回复
Ajax异步方式和同步方式,哪一个容易使浏览器卡死?
xuStanly 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 happydaisy1985 的回复:]
引用 5 楼 hookee 的回复:
不用ajax,直接访问取数据的页面,看看多次请求tomcat会不会同样停止服务?

这样的话页面可以访问,浏览器和tomcat也不会死掉。
[/Quote]

直接访问时有没有传递和ajax同样的参数?
z1g2w3i4 2009-09-21
  • 打赏
  • 举报
回复
那请确定无论什么情况都有返回值
KK3K2005 2009-09-21
  • 打赏
  • 举报
回复
问题一 需要重启服务器的话 那就不单单是前台的问题了
happydaisy1985 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hookee 的回复:]
不用ajax,直接访问取数据的页面,看看多次请求tomcat会不会同样停止服务?
[/Quote]
这样的话页面可以访问,浏览器和tomcat也不会死掉。
hookee 2009-09-21
  • 打赏
  • 举报
回复
不用ajax,直接访问取数据的页面,看看多次请求tomcat会不会同样停止服务?
抱抱我的小猫 2009-09-21
  • 打赏
  • 举报
回复
还有一只可能,XML过大,导致CPU占用过高
BeenZ 2009-09-21
  • 打赏
  • 举报
回复
推测主要原因,ajax结构不好
原因猜测1:你是不是设置成同步的了?
原因猜测2:如果你是异步调用,是否在值没返回的时候就对其进行了调用?(readystatus!=4的时候)
原因猜测3:服务器端处理是否有问题?检查下服务器端调用的时间
原因猜测4:请求是否超时
SK_Aqi 2009-09-21
  • 打赏
  • 举报
回复
不会是ajax不稳定吧?应该是第二种没有返回值,请求没处理.
灬上海爽爷 2009-09-21
  • 打赏
  • 举报
回复
sf,帮顶下
happydaisy1985 2009-09-21
  • 打赏
  • 举报
回复
Connection conn;
Statement st;
ResultSet rs,rs1,rs2,rs3,rs_shuiwen,rs_qixiang,rs_swdy,rs_qxdy;



public void init(ServletConfig config) throws ServletException {
//在数据库中校验登陆信息
//checking.......begin............................
try{
BrowseSession browseSession=new BrowseSession();
conn=((DatabaseDataSource)browseSession.getDataSource()).getConnection() ;
st=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ep) {
System.out.println("Data source Error:"+ep);
}
}
/*

* 处理<GET> 请求方法

*/


protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {
String zdid=request.getParameter("zdid");
String sql_shuiwen="select to_char(rq+1/60/60/24,'yyyy-mm-dd hh24:mi:ss'),zdid,to_char(round(shuiwen,1),'fm99990.0'),to_char(round(yandu,1),'fm99990.0'),to_char(round(chaowei,1),'fm9999999.0'),(sysdate-rq)*24*60 as interval from shuiwenmindata where rq=(select max(rq) from shuiwenmindata where zdid='"+zdid+"') and zdid='"+zdid+"'";

String sql_qixiang="select to_char(rq+1/60/60/24,'yyyy-mm-dd hh24:mi:ss'),zdid,to_char(round(qiwen,1),'fm99990.0'),to_char(round(shidu,1),'fm99990.0'),to_char(round(qiya,1),'fm99999.0'),to_char(round(jiangshui,1),'fm99990.0'),to_char(round(nengjiandu,1),'fm99990.0'),to_char(round(fengsu,1),'fm99990.0'),fengxiang,to_char(round(fengsuavg,1),'fm99990.0'),fengxiangavg,to_char(round(fengsuextr,1),'fm99990.0'),fengxiangextr,(sysdate-rq)*24*60 as interval from qixiangmindata where rq=(select max(rq) from qixiangmindata where zdid='"+zdid+"') and zdid='"+zdid+"'";
String sql_hourqixiang="select to_char(rq,'yyyy-mm-dd hh24:mi'),to_char(round(jiangshui2008,1),'fm99990.0'),to_char(round(jiangshui0820,1),'fm99990.0'),to_char(round(dayfengsuextr,1),'fm99990.0'),dayfengxiangextr,to_char(dayextrtime,'yyyy-mm-dd hh24:mi'),to_char(round(dayfengsumax,1),'fm99990.0'),dayfengxiangmax,to_char(daymaxtime,'yyyy-mm-dd hh24:mi') from mindongnew.qixianghourdata where rq=(select max(rq) from mindongnew.qixianghourdata where zdid='"+zdid+"') and zdid='"+zdid+"'";
String shuiwen_timelimit="select baojingtimelimit from mindong.qianduanpeizhi where zdid='"+zdid+"' and qdname='水文采集器'";
String qixiang_timelimit="select baojingtimelimit from mindong.qianduanpeizhi where zdid='"+zdid+"' and qdname='气象采集器'";
String shuiwen_dianya="select dianya from mindong.shuiwenrealdata where rq=(select max(rq) from shuiwenrealdata where zdid='"+zdid+"') and zdid='"+zdid+"'";
String qixiang_dianya="select dianya from mindong.qixiangrealdata where rq=(select max(rq) from qixiangrealdata where zdid='"+zdid+"') and zdid='"+zdid+"'";
//设置输出信息的格式及字符集
response.setContentType("text/xml;charset=utf-8");
response.setHeader("Cache-Control","no-cache");
//response.setHeader("refresh","2");

//创建输出流对象

PrintWriter out = response.getWriter();


out.print("<response>");
try{

rs_shuiwen=st.executeQuery(shuiwen_timelimit);
while(rs_shuiwen.next())
{
double shuiwen_limit=rs_shuiwen.getDouble(1);
//out.print(shuiwen_limit);
rs=st.executeQuery(sql_shuiwen);
while (rs.next())
{

if(rs.getDouble("interval")>shuiwen_limit)
{
out.print("<telestatus1>"+"<font color=#ff0000>通讯故障</font>"+"</telestatus1>");
}
else
{
out.print("<telestatus1>"+"<font color=#008000>通讯正常</font>"+"</telestatus1>");
}

out.print("<rq1>"+rs.getString(1)+"</rq1>");
out.print("<shuiwen>"+rs.getString(3)+"</shuiwen>");
out.print("<yandu>"+rs.getString(4)+"</yandu>");
out.print("<chaowei>"+rs.getString(5)+"</chaowei>");
}
}
}

catch(Exception e)
{
out.print(e.toString());
}
try
{

rs_qixiang=st.executeQuery(qixiang_timelimit);


while(rs_qixiang.next())
{
double qixiang_limit=rs_qixiang.getDouble(1);

rs1=st.executeQuery(sql_qixiang);
while (rs1.next())
{

if(rs1.getDouble("interval")>qixiang_limit)
{
out.print("<telestatus2>"+"<font color=#ff0000>通讯故障</font>"+"</telestatus2>");
}
else
{
out.print("<telestatus2>"+"<font color=#008000>通讯正常</font>"+"</telestatus2>");
}

out.print("<rq2>"+rs1.getString(1)+"</rq2>");
out.print("<qiwen>"+rs1.getString(3)+"</qiwen>");
out.print("<shidu>"+rs1.getString(4)+"</shidu>");
out.print("<qiya>"+rs1.getString(5)+"</qiya>");
out.print("<jiangshui>"+NullToSpace.getNullcheck(rs1.getString(6))+"</jiangshui>");
out.print("<nengjiandu>"+rs1.getString(7)+"</nengjiandu>");
out.print("<fengsu>"+rs1.getString(8)+"</fengsu>");
out.print("<fengxiang>"+rs1.getString(9)+"</fengxiang>");
out.print("<fengsuavg>"+rs1.getString(10)+"</fengsuavg>");
out.print("<fengxiangavg>"+rs1.getString(11)+"</fengxiangavg>");
out.print("<fengsuextr>"+rs1.getString(12)+"</fengsuextr>");
out.print("<fengxiangextr>"+rs1.getString(13)+"</fengxiangextr>");
}
}
}

catch(Exception e)
{
out.print(e.toString());
}


try
{


rs3=st.executeQuery(sql_hourqixiang);
while (rs3.next())
{

out.print("<jiangshui2008>"+rs3.getString(2)+"</jiangshui2008>");
out.print("<jiangshui0820>"+rs3.getString(3)+"</jiangshui0820>");
out.print("<dayfengsuextr>"+rs3.getString(4)+"</dayfengsuextr>");
out.print("<dayfengxiangextr>"+rs3.getString(5)+"</dayfengxiangextr>");
out.print("<dayextrtime>"+rs3.getString(6)+"</dayextrtime>");
out.print("<dayfengsumax>"+rs3.getString(7)+"</dayfengsumax>");
out.print("<dayfengxiangmax>"+rs3.getString(8)+"</dayfengxiangmax>");
out.print("<daymaxtime>"+rs3.getString(9)+"</daymaxtime>");
}

rs_swdy=st.executeQuery(shuiwen_dianya);
rs_qxdy=st.executeQuery(qixiang_dianya);
while (rs_swdy.next())
{
while (rs_qxdy.next())
{
out.print("<shuiwendianya>"+rs_swdy.getDouble(1)+"</shuiwendianya>");
out.print("<qixiangdianya>"+rs_qxdy.getDouble(1)+"</qixiangdianya>");
}
}

}
catch(Exception e)
{
out.print(e.toString());
}
try{


rs_swdy=st.executeQuery(shuiwen_dianya);

while (rs_swdy.next())
{
out.print("<shuiwendianya>"+rs_swdy.getString(1)+"</shuiwendianya>");

}
}
catch(Exception e)
{
out.print(e.toString());
}
try{


rs_qxdy=st.executeQuery(qixiang_dianya);

while (rs_qxdy.next())
{
out.print("<qixiangdianya>"+rs_qxdy.getString(1)+"</qixiangdianya>");

}
}
catch(Exception e)
{
out.print(e.toString());
}

out.print("</response>");
out.close();

}


public void destroy()
{
try{

if (rs!=null) rs.close();
if (rs1!=null) rs1.close();
if (rs2!=null) rs2.close();
if (rs3!=null) rs3.close();
if (rs_shuiwen!=null) rs_shuiwen.close();
if (rs_qixiang!=null) rs_qixiang.close();
if (rs_swdy!=null) rs_swdy.close();
if (rs_qxdy!=null) rs_qxdy.close();
if (st!=null) st.close();
if (conn!=null) conn.close();
}
catch(Exception e){


}
}

}

前台生成的XML文档:
- <response>
<telestatus1><font color=#008000>通讯正常</font></telestatus1>
<rq1>2009-09-21 15:23:00</rq1>
<shuiwen>99999.0</shuiwen>
<yandu>99999.0</yandu>
<chaowei>460.9</chaowei>
java.lang.NullPointerException
<telestatus2><font color=#008000>通讯正常</font></telestatus2>
<rq2>2009-09-21 15:23:00</rq2>
<qiwen>29.4</qiwen>
<shidu>77.7</shidu>
<qiya>1008.1</qiya>
<jiangshui>0.0</jiangshui>
<nengjiandu>null</nengjiandu>
<fengsu>2.7</fengsu>
<fengxiang>91</fengxiang>
<fengsuavg>3.5</fengsuavg>
<fengxiangavg>107</fengxiangavg>
<fengsuextr>3.5</fengsuextr>
<fengxiangextr>96</fengxiangextr>
java.lang.NullPointerException
<jiangshui2008>0.0</jiangshui2008>
<jiangshui0820>0.0</jiangshui0820>
<dayfengsuextr>5.5</dayfengsuextr>
<dayfengxiangextr>130</dayfengxiangextr>
<dayextrtime>2009-09-21 14:42</dayextrtime>
<dayfengsumax>4.4</dayfengsumax>
<dayfengxiangmax>118</dayfengxiangmax>
<daymaxtime>2009-09-21 14:10</daymaxtime>
java.lang.NullPointerException
<shuiwendianya>13.42</shuiwendianya>
<qixiangdianya>14.21</qixiangdianya>
</response>

大家帮我看看,代码问题出在哪里?还有怎么会出现这个错误java.lang.NullPointerException
分不够可以再加,多多帮忙啊。。
happydaisy1985 2009-09-21
  • 打赏
  • 举报
回复
直接访问时也传递了和ajax同样的参数?
mqtheone 2009-09-21
  • 打赏
  • 举报
回复
你的代码问题

52,797

社区成员

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

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