大家帮我看看这个AJAX怎么用啊,摸了半天不知道怎么用

jim8590251 2008-12-11 03:06:58

function Ajax(sUrl,sRecvType,sQueryString,oResultFunc,sError,sState,sDownloadEnd)
{
//访问服务器地址
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] = "未初始化...";
strState[1] = "开始读取数据...";
strState[2] = "读取数据...";
strState[3] = "读取数据中...";
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 = "<img src='images/loading.gif'> <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;
}
};



以上这个怎么用呢
var proname = $("stu_pro").value;
var aj = new Ajax("adminajax.php",1,"menu=setcity&proid="+proname,'',"myajax","myajax","myajax");
aj.sMethod = "get";
aj.send();

这样用,只能把adminajax.php?menu=setcity&proid=..这个地址得到的值传到了页面上的一个ID为myajax的 DIV里面
可是我想得到这个值,没办法得到它
我再用
var mytext = $("myajax").value;
alert(mytext);
得到的缺是开始加载的"<img src='images/loading.gif'> <font color=red>" + statusText + "</font> ";

我如果把
var aj = new Ajax("adminajax.php",1,"menu=setcity&proid="+proname,'',"myajax","myajax","myajax");
改成了
var aj = new Ajax("adminajax.php",1,"menu=setcity&proid="+proname,getvalue(),"myajax","myajax","myajax");
再在getvalue()函数里来取myajax.innerHTML
发现他是先执行getvalue();再加载AJAX,而不是AJAX执行好了,再取innerHTML,高手帮我看看吧


...全文
136 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaojiao_IT 2010-04-27
  • 打赏
  • 举报
回复
分享的东西是做什么的啊 ???
penglewen 2008-12-12
  • 打赏
  • 举报
回复
支持下lz的分享精神。
jim8590251 2008-12-12
  • 打赏
  • 举报
回复
搞好了,发出来与大家共享

//****************************************
//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;
}
}
};
ccjjww1222 2008-12-12
  • 打赏
  • 举报
回复
想要取得返回值
可以定义一个全局变量 把返回值赋值给 全局变量
同时把异步操作 改成同步的 就可以了
wzwen 2008-12-12
  • 打赏
  • 举报
回复
是啊,和楼主同感,最近也准备学ajax,感觉代码就跟猪肠子一样,一大串.......
itian 2008-12-11
  • 打赏
  • 举报
回复
楼上说得没错。就是要写这么一大串,不是没用的。每个字母都有用。
jim8590251 2008-12-11
  • 打赏
  • 举报
回复
哦,多谢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)
{


有没有什么办法把这些放到一起去呢.....
程序猿之殇 2008-12-11
  • 打赏
  • 举报
回复
建议你好好学学啥叫ajax.
getAjaxText(url)这个函数的作用就是向服务器发送请求以获取数据,获取数据的结果由ajax的回调函数来处理.
在回调函数内完成操作以后,这个请求就完成了.也就是说,对于这个从服务器返回的数据,你只能在它的回调函数里处理.
getAjaxText本身是不能返回任何值的.

讲一个详细的ajax操作过程:
  1 点击一个按钮,触发getAjaxText(url)函数.
  2 getAjaxText(url)在函数内部向url发送数据请求,指明onreadystatechange回调函数. 结束了.
  3 服务器收到请求,将数据交给回调函数处理. ajax.responseText.
  4 收到请求后,完成操作,或者弹出,或将其传给表单中的任何元素显示出来.

如果你这个请求的url地址不变,就不需要每次都请求了,想获取数据就操作哪个保留返回数据的表单元素就行了.

只能说这么多了,再不明白,找你老师去吧,呵呵.

jim8590251 2008-12-11
  • 打赏
  • 举报
回复
我是想所有的地方都共用getAjaxText(url)
如果不用return 该怎么做呢?
如果var text = ajax.responseText;
然后继续操作的话,那其他地方又该如何用getAjaxText(url)这个函数呢
程序猿之殇 2008-12-11
  • 打赏
  • 举报
回复
ajax不是你这样用的.老兄!
不能return.


if(ajax.status==200)
{
var text = ajax.responseText;
//然后完成操作,可以调用函数.
.....
}

jim8590251 2008-12-11
  • 打赏
  • 举报
回复
哎...这个太难用了
要不然,大家帮我看看,为什么我这个函数返回不了值呢
用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);

}

jim8590251 2008-12-11
  • 打赏
  • 举报
回复

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>
并不是想要的结果..
程序猿之殇 2008-12-11
  • 打赏
  • 举报
回复
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);
jim8590251 2008-12-11
  • 打赏
  • 举报
回复
我以前用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);
都能弹出我想要的结果
高手帮忙.....

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧