本帖最后由 kyzy_yy_pm 于 2011-03-10 18:05:47 编辑

解决方案 »

  1.   

            if(arguments[3]){
                me.request.onreadystatechange = me.callback;
            }else{
                me.request.onreadystatechange = me.callback();
            }不知道跟括号有关系不,俺试下先~
      

  2.   

    if(arguments[3]){
    me.request.onreadystatechange = me.callback;
    }else{
    me.callback();
    }貌似这样可以~猜测:是不是同步的情况下用不到回调。
      

  3.   

    试试这
    function GetXmlHttpObject()
    {
    var xmlHttp=null;
    try
     {
     // Firefox, Opera 8.0+, Safari
     xmlHttp=new XMLHttpRequest();
     }
    catch (e)
     {
     //Internet Explorer
     try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
     catch (e)
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
     }
    return xmlHttp;
    }
      

  4.   

    应该要这样的,IE是通过ActiveX实现XMLRequest对象的。
    LZ也可以看看jquery里面是怎么实现,参考下。
      

  5.   

    哈哈,多谢大家了,我弄出来了,真是郁闷了以前一直以为ajax回调函数在哪里都行呢,原来不是,嘿嘿,把这个发给大家看看,我写的一个(补足了firefox同步请求出现的问题,不过只用于ajax请求操作)/**
     * 用法试例:
     * var obj = new myAjax();
     * obj.send(url, "post", data, false, function(data){});
     * -
     * args_1 | 提交路径
     * args_2 | 提交方式(get、post)
     * args_3 | 提交数据(数组)
     * args_4 | 是否同步(true-异步[默认],false-同步)
     * args_5 | 回调函数
     * -
     * obj.request.responseText是服务器端(php)返回的数据,可以根据它来进行后续的判断
     */
    var myAjax = function(){
    var me  = this;
    this.args  = arguments;
    this.execCallBack = ""; this.createxmlHttpRequest = function(){
    if(!me.request){
    if(window.XMLHttpRequest){
    return new XMLHttpRequest();
    }else{
    return new ActiveXObject("Microsoft.XMLHTTP");
    }
    }
    } this.send = function(){
    me.request = me.createxmlHttpRequest();
    var send = "";
    for(var item in arguments[2]){
    send += "&" + item + "=" + arguments[2][item];
    } if(arguments[1].toLowerCase() == "post"){
    url = arguments[0];
    }else{
    url = arguments[0]  + send
    send = null;
    } me.request.open(arguments[1].toLowerCase(), url, arguments[3]);
    me.execCallBack = arguments[4];
    if(navigator.userAgent.indexOf("Firefox") <= 0 && !arguments[3]) {
    me.request.onreadystatechange = me.callback;
    }
    me.request.setRequestHeader("content-type", "application/x-www-form-urlencoded");
    me.request.send(send);
    if(!(navigator.userAgent.indexOf("Firefox") <= 0 && !arguments[3])) {
    if(arguments[3]){
    me.request.onreadystatechange = me.callback;
    }else{
    me.request.onreadystatechange = me.callback();
    }
    }
    } this.callback = function(){
    if (me.request.readyState == 4 && me.request.status == 200){
    new me.execCallBack(me.request.responseText);
    }
    }
    }