为什么我的 XMLHttpReq.readyState 总是返回1

huang_w 2008-05-01 03:21:03
不知道为什么XMLHttpReq.readyState 总是等于1
我想实现这样一个功能:
进入页面时,页面先加载一个javascript函数,自动调用一个struts 里面的action连接数据库 拿到数据库里面的值
并把值返回页面填充到下拉列表中.
下面是我的相关代码,不知道那里出错了,我也有一个不解的地方,我在返回那个页面以后那个页面还是重新加载,还是在去调用javascript函数,是不是死循环了?
希望大家帮我看一下!应该怎么解决?谢谢
<script type="text/javascript">

var XMLHttpReq;
var targetSeId;
function createXMLHttpRequest(){
if(window.XMLHttpRequest) {//Mozilla
XMLHttpReq=new XMLHttpRequest();
}else if(window.ActiveXObject){//IE 浏览器
try {
XMLHttpReq=new ActiveXObject("Msxml2.XMLHTTP ");

} catch (e){
try{
XMLHttpReq=new ActiveXObject("Micrsost.XMLHTTP ");
}catch(e){}
}
}
if(!XMLHttpReq){
alert("无法创建 XMLHttpRequest 对象!");
}
}
function loadfirst(){
alert("开始加载...");
var url="http://localhost:8080/IsfotMycar1/loadBrand.do";
createXMLHttpRequest();
if(XMLHttpReq){
XMLHttpReq.open("GET",url,true);
alert("open");
XMLHttpReq.onreadystatechange=loadcallback();
XMLHttpReq.send(null);
}
}
function loadcallback(){
alert("回调..");
alert(XMLHttpReq.readyState);
if(XMLHttpReq.readyState==4){
if(XMLHttpReq.status==200){
parseMessage2();
}else{
alert("返回不正常"+XMLHttpReq.statusText);
}
}
}
function parseMessage2(){
var xmlDoc=XMLHttpReq.responseXML.documentElement;
var xSel=xmlDoc.getElementsByTagName('select');
var select_root=document.getElementById('select1');
select_root.options.length=1;
for(var i=0;i<xSel.length;i++){
var xValue=xSel[i].childNodes[0].firstChild.nodeValue;
var xText=xSel[i].childNodes[1].firstChild.nodeValue;
select_root.options[i+1]=new Option(xText,xValue);
}
}
</script>

<body onload="loadfirst()">
<form action="/inquireScar.do" method="post">
请选择品牌:<select id="select1" >
<option value="">请选择--</option>
</select>
</form>
</body>


=============================================================================
action 类:

public class LoadBrandAction extends Action {
/*
* Generated Methods
*/

/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
private SecCarService secCarServiceImpl;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
List list=secCarServiceImpl.getAllCar();
System.out.println("list的值:"+list);
if(list!=null){
StringBuffer xml=new StringBuffer("<selects>");
for(Object s : list){
System.out.println("品牌:"+((SecCarSell)s).getSecCarBrand());
xml.append("<select><value>"+((SecCarSell)s).getSecCarBrand()+"</value><text>"+((SecCarSell)s).getSecCarBrand()+"</text></select>");
}
xml.append("</selects>");
try {
response.setContentType("text/xml;charset=gb2312");
response.getWriter().write(xml.toString());
System.out.println("成功返回!");
} catch (IOException e) {
e.printStackTrace();
}
}
return mapping.findForward("secfind");//跳到显示下拉列表页面
}
public void setSecCarServiceImpl(SecCarService secCarServiceImpl) {
this.secCarServiceImpl = secCarServiceImpl;
}
}
...全文
838 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwzpp 2011-05-17
  • 打赏
  • 举报
回复
看看看问题1111111111111
hyj1984 2008-05-04
  • 打赏
  • 举报
回复
对啊
hoszone 2008-05-04
  • 打赏
  • 举报
回复
楼上说的很清晰啊.
ahua3515 2008-05-04
  • 打赏
  • 举报
回复
还有,你action类里return null 就可以了。不需要后面的那个,要不然可能造成死循环了
kokobox 2008-05-01
  • 打赏
  • 举报
回复
还有lz对在js中对象的引用和对象的返回值没有弄的太清楚,建议lz看一写有关js面向对象编程的书籍,会对你有很大帮助的

可以推荐你一本:《ajax实战》

kokobox 2008-05-01
  • 打赏
  • 举报
回复
lz提到了返回值,可以把返回值得的几种状态给lz说一下:

readyState有五种可能的值:
0 (未初始化): (XMLHttpRequest)对象已经创建,但还没有调用open()方法。
1 (载入):已经调用open() 方法,但尚未发送请求。
2 (载入完成): 请求已经发送完成。
3 (交互):可以接收到部分响应数据。
4 (完成):已经接收到了全部数据,并且连接已经关闭。

readyState 状态 状态说明

(0)未初始化
此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备。值为0表示对象已经存在,否则浏览器会报错--对象不存在。

(1)载入
此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,url,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。

(2)载入完成
此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。

(3)交互
此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。

(4)完成
此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。

概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段:

创建-初始化请求-发送请求-接收数据-解析数据-完成

kokobox 2008-05-01
  • 打赏
  • 举报
回复
lz的这个地方错了:XMLHttpReq.onreadystatechange=loadcallback();

应该是:XMLHttpReq.onreadystatechange=loadcallback;



67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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