首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

Ajax 回调函数callback的重用有关问题

2013-12-21 
Ajax 回调函数callback的重用问题当我想重用callback的时候出现问题了还是依然反馈回来的是第一个绑定的ca

Ajax 回调函数callback的重用问题
当我想重用callback的时候出现问题了
还是依然反馈回来的是第一个绑定的callback
麻烦帮小弟看一下 十分感谢啦
代码如下: 
function doclick() {
        var url = "validate2.do?id=" + test + "&id2=" + test2;
        if (window.XMLHttpRequest) {

            req = new XMLHttpRequest();
        } else if (window.ActiveXObject) {

            req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        req.open("GET", url, true);
        req.onreadystatechange = function () { callback('doclick1'); }
        req.send(null);
    }
    function callback(p) {

        if (req.readyState == 4 && req.status == 200) {
            var check = req.responseText; //查看接收到的后台传过来的html命令 
            alert("看看接收到的p是多少"+p);  //此句最后无论怎么 接收到的永远是doclick 而接收不到doclick2
            show(check,p);

        };
    }
    function show(str,p) {
        //////
        if (p == 'doclick') {
            var show = str;
            document.getElementById("status1").innerHTML = show;

            if (str == "Disconnect") {
                var show = "<img src="images/failed.gif" height="16" width="16">&nbsp<font color='red'> Sorry, Disconnect! Please reconnect.</font>";
                document.getElementById("status1").innerHTML = show;

            } else if (str == "TIMEOUT") {
                var show = "<img src="images/failed.gif" height="16" width="16">&nbsp<font color='red'> Sorry, Connection time out!</font>";
                document.getElementById("info").innerHTML = show;
            } 
            doclick(); //收到数据后继续执行doclick事件继续监听后台
        }
        else if (p == 'doclick2'){ //另外的点击事件
            var show = str;
            document.getElementById("status1").innerHTML = show;

            if (str == "Disconnect") {
                var show = "<img src="images/failed.gif" height="16" width="16">&nbsp<font color='red'> Sorry, Disconnect! Please reconnect.</font>";
                document.getElementById("status1").innerHTML = show;

            } else if (str == "TIMEOUT") {
                var show = "<img src="images/failed.gif" height="16" width="16">&nbsp<font color='red'> Sorry, Connection time out!</font>";
                document.getElementById("info").innerHTML = show;
            }
        }
    }

    function doclick2() {

        var td = event.srcElement; // 通过event.srcElement 获取激活事件的对象 td
        var url = "validate2.do?id3=" + td.id + "&id4=" + td.name;
        alert(td.id + td.name);


        //创建一个XMLHttpRequest对象req 
        if (window.XMLHttpRequest) {
            //IE7, Firefox, Opera支持  
            req = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            //IE5,IE6支持 
            req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        req.open("GET", url, true);
        req.onreadystatechange = function () { callback('doclick2'); }
        //send函数发送请求
        req.send(null);
    }

[解决办法]
你怎么绑定的事件,如何触发这2个函数的

下班了,有空在看看
[解决办法]
req = new XMLHttpRequest();
你的 req 是全局的
那么在 doclick2 尚未完成返回时,就触发 doclick1 的话就会覆盖了上次的通讯
大致应这么写

function doclick(callback, param) {
  var url = "validate2.do?" + param;
  var reg;
  if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  req.open("GET", url, true);
  req.onreadystatechange = function () {
    if (req.readyState == 4 && req.status == 200) {
       var check = req.responseText; 
       callback(check);
    }
  }
  req.send(null);
}

热点排行