+ -
当前位置:首页 → 问答吧 → 初学ajax ,最原始的实现异步提交,但是readyState一直等于1

初学ajax ,最原始的实现异步提交,但是readyState一直等于1

时间:2011-12-02

来源:互联网

JScript code
var request = false;
try {
    request = new XMLHttpRequest();
} catch (trymicrosoft) {
    try {
        request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
        try {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (failed) {
            request = false;
        }
    }
}

JScript code
function doSubmitFunc() {
    var url = "/struts/RegFacade";
    // 通过GET方式打开连接
    request.open("GET", url, true);
    request.onreadystatechange = updatePage;
    request.send(null);
    alert(request.readyState);
    alert(request.responseText);
    var textBox = document.getElementById("id");
    textBox.value = request.responseText;
    request.onreadystatechange = updatePage;
}

JScript code
// 返回数据的处理函数
function updatePage() {
    if (ajax.readyState == 4 && ajax.status == 200) {
        alert(request.responseText);
        alert("Server is done!");
    } else if (request.status == 404) {
        alert("Request URL does not exist");
    } else {
        alert("Error: status code is " + request.status);
    }
}

servlet返回一个字符串 在request.responseText能alert出来。
但是readyState一直是1 为什么啊

还有如果用struts的话 execute方法没有参数 ,怎么给后台传递数据啊

作者: orxtiger   发布时间: 2011-12-02

function doSubmitFunc() {
  var url = "/struts/RegFacade";
  // 通过GET方式打开连接
  request.open("GET", url, true);
  request.onreadystatechange = updatePage;
  request.send(null);
alert(request.readyState);
alert(request.responseText);//把红色删除试试,看看alert(request.responseText);是否弹出你想要的信息!
  var textBox = document.getElementById("id");
  textBox.value = request.responseText;
  request.onreadystatechange = updatePage;
}

作者: DemoChen   发布时间: 2011-12-02

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对象的生命周期应该包含如下阶段:

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

作者: MuBeiBei   发布时间: 2011-12-02

//js
var xmlHttp;
//创建对象
function createXmlHttp() {
  //根据window.XMLHttpRequest对象是否存在使用不同的创建方式
  if (window.XMLHttpRequest) {
  xmlHttp = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式
  } else {
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
  }
  return xmlHttp;
}
//发送请求
function b(){
  createXmlHttp(); //创建XmlHttpRequest对象
  xmlHttp.onreadystatechange =signCallBackPackSend_bufa; //设置回调函数
  xmlHttp.open("GET", "/setup/transconf/transConfAction.do?method=check&startDate=2011-11-11&endDate=2012-12-12", true);
  xmlHttp.send(null);
}
//回调函数
function signCallBackPackSend_bufa() {
  if (xmlHttp.readyState == 4) {
var value = xmlHttp.responseText; //获取返回字符串
  alert(value);
  }
 }


//action 返回传入的参数 startDate ; endDate
public ActionForward check(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

String startDate=request.getParameter("startDate");
String endDate=request.getParameter("endDate");
try {
PrintWriter out = response.getWriter();
out.print(startDate+";"+endDate);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

作者: tlzl31719   发布时间: 2011-12-02