我以前用AJAX每次调用都要写好大一串重复代码
我想把那些都放到AJAX.JS里去,可是就是返回不了值得,贴代码如下://根据浏览器的不同创建AJAX对象
function createAjax()
{
var _xmlhttp;
try
{
_xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
try
{
_xmlhttp=new XMLHttpRequest();
}
catch(e)
{
_xmlhttp=false;
}
}
return _xmlhttp;
}
//传递个url,得到url处理结果
function getAjaxText(url)
{
var ajax=createAjax();
var info;
ajax.open("GET",url,true);
$("myhint").style.display='';
ajax.onreadystatechange=function()
{
if(ajax.readyState==4)
{
if(ajax.status==200)
{
return ajax.responseText;
$("myhint").style.display='none';
}
else if(ajax.status == 404)
{
alert("没有找到处理文件");
}
}
}
ajax.send(null);

}这里return ajax.responseText;
就是返回不了值,如果改成alert(ajax.responseText);
都能弹出我想要的结果
高手帮忙.....

解决方案 »

  1.   

    var proname = $("stu_pro").value; 
    var aj = new Ajax("adminajax.php",1,"menu=setcity&proid="+proname,'',"myajax","myajax","myajax"); 
    aj.sMethod = "get"; 
    aj.send(); //这样获取就可以了.
    //jquery是这样写的 $("stu_pro")
    alert(document.getElementById("myajax").innerHTML);
      

  2.   


    var proname = $("stu_pro").value;
       var aj = new Ajax("adminajax.php",1,"menu=setcity&proid="+proname,getvalue(),"myajax","myajax","myajax");
       aj.sMethod = "get";
       aj.send();
       var mytext = document.getElementById("myajax").innerHTML;
       alert(mytext);
    弹出来的值是
    <img src='images/loading.gif'> <font color=red>开始读取数据..</font>
    并不是想要的结果.. 
      

  3.   

    哎...这个太难用了
    要不然,大家帮我看看,为什么我这个函数返回不了值呢
    用alert(),弹出的都是我想要的结果,用return 就不行了
    贴代码://传递个url,得到url处理结果
    function getAjaxText(url)
    {
        var ajax=createAjax();
        var info;
        ajax.open("GET",url,true);
        $("myhint").style.display='';
        ajax.onreadystatechange=function()
        {
                if(ajax.readyState==4)
                {
                    if(ajax.status==200)
                    {
                        return ajax.responseText;
                        $("myhint").style.display='none';
                    }
                    else if(ajax.status == 404)
                    {
                        alert("没有找到处理文件");
                    }
                }
        }
        ajax.send(null);
        
    }
      

  4.   

    ajax不是你这样用的.老兄!
    不能return.
    if(ajax.status==200)
    {
       var text = ajax.responseText;
       //然后完成操作,可以调用函数.
       .....  
    }
      

  5.   

    我是想所有的地方都共用getAjaxText(url)
    如果不用return 该怎么做呢?
    如果var text = ajax.responseText; 
    然后继续操作的话,那其他地方又该如何用getAjaxText(url)这个函数呢
     
      

  6.   

    建议你好好学学啥叫ajax.
    getAjaxText(url)这个函数的作用就是向服务器发送请求以获取数据,获取数据的结果由ajax的回调函数来处理.
    在回调函数内完成操作以后,这个请求就完成了.也就是说,对于这个从服务器返回的数据,你只能在它的回调函数里处理.
    getAjaxText本身是不能返回任何值的.讲一个详细的ajax操作过程:
      1 点击一个按钮,触发getAjaxText(url)函数.
      2 getAjaxText(url)在函数内部向url发送数据请求,指明onreadystatechange回调函数. 结束了.
      3 服务器收到请求,将数据交给回调函数处理. ajax.responseText.
      4 收到请求后,完成操作,或者弹出,或将其传给表单中的任何元素显示出来.如果你这个请求的url地址不变,就不需要每次都请求了,想获取数据就操作哪个保留返回数据的表单元素就行了.只能说这么多了,再不明白,找你老师去吧,呵呵.
      

  7.   

    哦,多谢jakey9826 
    不过,不过.........难道说我每次用到AJAX,都要写这么一大串没用的?var proname = $("stu_pro").value;
    var url="../ajaxprocess.php?menu=setcity&proid="+proname;
    $("myhint").style.display='';
    var ajax=createAjax();
    ajax.open("GET",url,true);
    ajax.onreadystatechange=function()
    {
    if(ajax.readyState==4)
    {
    if(ajax.status==200)
    {
    有没有什么办法把这些放到一起去呢.....
      

  8.   

    是啊,和楼主同感,最近也准备学ajax,感觉代码就跟猪肠子一样,一大串.......
      

  9.   

    搞好了,发出来与大家共享//****************************************
    //this javascript file is written for index.php
    //everyone who using this file ,sholud check this js first
    //
    /**
    **
     * ajax技术使用探讨
     *
     * @author      BreezeXu
     * @version     1.0
     * @lastupdate  2008-11-17
     *
     */
     /*
    /*********************************************************************/
    //var XmlHttp;
    //var Obj;
    /*
    构造函数
    */
    function Ajax(sUrl,sRecvType,sQueryString,oResultFunc,sError,sState,sDownloadEnd,sType) 
    {
    //Add by breezeXu 2008-12-12
    //传递个类别过来,对应类别操作
    this.sType = sType; 
        //访问服务器地址
        this.sUrl = sUrl;    
        //this.object = null;
        //this.sMethod = null;
        //返回数据类型,0为xml,1为text
        this.sRecvType = sRecvType;
        // 错误字符串
        this.ErrorStr = null;
        // 错误事件驱动,当发生错误时触发
        this.OnError = null;
        // 状态事件驱动,当状态改变时触发
        //this.EventState = EventState;
        
        this.sRecvType = sRecvType;
        
        this.QueryString = sQueryString;
        
        this.oResultFunc = oResultFunc;
    //页面上显示错误的html标记id,标记不填或留空则采用默认标记,下同
    this.sError = sError;
    //页面上显示状态的html标记id
    this.sState = sState;
    //页面上显示完成回调的html标记id
    this.sDownloadEnd = sDownloadEnd;
        //建立xmlhttp对象
        this.XmlHttp = this.createXMLHttpRequest();    
        
        XmlHttp = this.XmlHttp;    
        if (this.XmlHttp == null) {
            alert('XMLHTTPREQUEST对象创建不成功!');
        } else if (typeof this.XmlHttp == "object") {
            //alert('XMLHTTPREQUEST对象创建成功!');
        }
        
        Obj = this;
        //定义xmlhttp对象的状态句柄
        this.XmlHttp.onreadystatechange = this.handler;
        
    };/*
    创建XMLHttp对象
    */
    Ajax.prototype.createXMLHttpRequest = function() {
        if (window.XMLHttpRequest){     
            return  new XMLHttpRequest();
        } else {      
            var MSXML = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; 
            for(var n = 0; n < MSXML.length; n ++) {
                try {
                  return new ActiveXObject(MSXML[n]); return; 
                } catch(e) {
                    this.ErrorStr = "XMLHttpRequest对象创建不成功!.";
                } 
            }
        }
        this.ErrorStr = "你的浏览器不支持XMLHttpRequest对象.";    
        if (typeof this.EventError == "function") {
             this.EventError(this.ErrorStr); 
        }    
        return null;
    };/*
    发送服务器请求
    */
    Ajax.prototype.send = function() {
        sUrl = this.sUrl;
        sMethod = this.sMethod;
        var sUrl = sUrl + "?timeStamp=" + new Date().getTime();//采取当前时间取不同url,防止页面缓存

        var queryString = this.QueryString;
        if (sMethod.toLocaleUpperCase() == 'POST') {
            //POST方式
            this.XmlHttp.open("POST",sUrl,true);
            this.XmlHttp.setRequestHeader("content-length",queryString.length);
            //this.XmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded","charset=UTF-8");
            this.XmlHttp.send(queryString);
        } else if (sMethod.toLocaleUpperCase() == 'GET') {
        //GET方式
            queryString = sUrl + "&" + this.QueryString;
            this.XmlHttp.open("GET",queryString,true);
        this.XmlHttp.send(null);        
        }
    };/*
    sRecvType 接受数据类型:0为xml 1为text
    responseBody  将回应信息正文以unsigned byte数组形式返回的未经解码的二进制数据.只读 
    responseText 将响应信息作为字符串返回.只读
    */Ajax.prototype.handler = function () {

        if(Obj.EventState) 
    {
          Obj.EventState(XmlHttp.readyState);
      
        }
      if (XmlHttp.readyState == 4) 
      {
          if (XmlHttp.status == 200) 
      {          
              if(Obj.oResultFunc)
      {
                  this.RetData = Obj.UTFTOGB(XmlHttp.responseBody);
                  //alert(this.RetData);//返回ajax请求的内容
      //此处可以添加详细的处理函数,使用ajax返回结果,做相应操作
                  //Obj.oResultFunc(this.RetData); 
              } /*
    sRecvType 接受数据类型:1为text 0为xml 
    */
        
              Result = (Obj.sRecvType) ? XmlHttp.responseText :    Result = XmlHttp.responseXML;
              Obj.EventDownloadEnd(Result);          
              Obj.status = XmlHttp.status;
     }
     else 
     {

              Obj.ErrorStr = "您所请求的页面有异常。";
              if (typeof Obj.EventError == "function") {
                  Obj.EventError(Obj.ErrorStr); 
          }
        }
      }
    };
    // UTF 转入 GB (by:Rimifon) 
    Ajax.prototype.UTFTOGB = function(strBody) { 
        var Rec=new ActiveXObject("ADODB.RecordSet"); 
        Rec.Fields.Append("DDD",201,1); 
        Rec.Open(); 
        Rec.AddNew(); 
        Rec(0).AppendChunk(strBody); 
        Rec.Update(); 
        var HTML=Rec(0).Value; 
        Rec.Close(); 
        delete Rec; 
        return(HTML); 
    };
    // 错误回调事件函数 
    Ajax.prototype.EventError = function(strValue){ 
        if(this.sError != null && this.sError != "" && document.getElementById(this.sError) != "undefined"){
        document.getElementById(this.sError).innerHTML = strValue; 
    }
    };// 状态回调事件函数 
    Ajax.prototype.EventState = function(strValue) { 
        var strState = new Array(); 
        strState[0] = "<img src='images/loading.gif'>未初始化..."; 
        strState[1] = "<img src='images/loading.gif'>开始读取数据..."; 
        strState[2] = "<img src='images/loading.gif'>读取数据...";
        strState[3] = "<img src='images/loading.gif'>读取数据中..."; 
        strState[4] = "";//"读取完成...";
        statusText = (strValue < 4 || strValue != 0) ? strState[strValue] : strState[0];
    if(this.sState != null && this.sState != "" && document.getElementById(this.sState) != "undefined"){
        document.getElementById(this.sState).innerHTML = " <font color=red>" + statusText + "</font> "; 
    }
    };// 完成回调事件函数 
    Ajax.prototype.EventDownloadEnd = function (strValue) 
    {
        if(this.sDownloadEnd != null && this.sDownloadEnd != "" && document.getElementById(this.sDownloadEnd) != "undefined")
    {
    document.getElementById(this.sDownloadEnd).innerHTML = strValue; 
    }
    else //在这里处理结果
    {
    switch(this.sType)
    {
    case "setcity": //省市连动
    var labels=strValue.split("|");
    document.getElementById("stu_city").options.length=0;
    document.getElementById("stu_city").add(document.createElement("OPTION"));
    document.getElementById("stu_city").options[0].text="所有城市";
    document.getElementById("stu_city").options[0].value="";
    for(var ii=0;ii<labels.length;ii++)
    {
    var nn = labels[ii].split("*");
    var jj = ii+1;
    document.getElementById("stu_city").add(document.createElement("OPTION"));
    document.getElementById("stu_city").options[jj].text=nn[1];
    document.getElementById("stu_city").options[jj].value=nn[0];
    }
    document.getElementById("stu_city").selectedIndex = 0; 
     break;
    }
    }
    };