var xmlHttp;//声明一个XHR对象
//创建一个XHR对象
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else {
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
}
//向服务端发起异步请求:GET(入口函数),callback为回调函数名称
function doRequestUsingGET(url, callback) {
createXMLHttpRequest();
xmlHttp.onreadystatechange = callback;
xmlHttp.open("GET", url + "&timeStamp=" + new Date().getTime(), true);
xmlHttp.send(null);
}
//以下是callback函数的定义
function changeNRNRState() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
if (parseInt(xmlHttp.responseText) == 1) {
updateMsgCount("nrnr_count", "rnr_count");
} else {
alert("\u7559\u8a00\u72b6\u6001\u66f4\u65b0\u5931\u8d25!");
location.href = "msg.do?m=admin_msg&state=nrnr";
}
}
}
}
上面这段代码的作用是用户点留言连接后,更新留言的状态,例如:留言的状态为“未读未回复”,点击后状态变为“已读已回复”,回复留言后状态变为“已读已回复”。现在遇到两个问题:
Q1.xmlHttp.responseText返回的字符串在IE7下能通过:xmlHttp.responseText=="ok"的形式作比较,但是在FF3.5和google浏览器2.0下却不能作比较,需要作一个处理才能,比如split()和parseInt()。这是为什么?
Q2.上面的回调函数changeNRNRState()如果有参数应该怎么组织到doRequestUsingGET(url, callback)这个函数里去,让它更具有通用性?我这样尝试这样写,但是通不过:
function doRequestUsingGET(url, callback(oLink)) {
createXMLHttpRequest();
xmlHttp.onreadystatechange = callback(oLink);
xmlHttp.open("GET", url + "&timeStamp=" + new Date().getTime(), true);
xmlHttp.send(null);
}

解决方案 »

  1.   

    和google浏览器2.0下却不能作比较,需要作一个处理才能,比如split()和parseInt()。这是为什么? 
    -----------
    FF下不行?
    oLink 参数是什么呢?且oLink怎么传呢?
      

  2.   


    function doRequestUsingGET(url, callback) {
        createXMLHttpRequest();
        xmlHttp.onreadystatechange = callback;
        xmlHttp.open("GET", url + "&timeStamp=" + new Date().getTime(), true);
        xmlHttp.send(null);
    }
    callback的实际函数如果带参数,用 
    doRequestUsingGET("xxx", function(){xxxx(slink);}) 方式调用
      

  3.   

     var call=function(){xxxx(slink);} 方式调用再传call
      

  4.   

    对不起,我忘了解释oLink了,它是<a>的一个引用
      

  5.   

    2L和3L把Q2的问题解决了,Q1的问题怎么办呢?
      

  6.   

    Q1的问题解决了,出现这个问题的根源是在java代码里我调用out.println()来输出响应的字符串,它会给字符串增添看不见的换行符,所以用JS的==比较永远都会返回false,用alert()很难觉察到,改为out.print()就可以了~