javascript

位置:IT落伍者 >> javascript >> 浏览文章

给大家讲个不错的ajax组件


发布日期:2020年12月06日
 
给大家讲个不错的ajax组件

function Xajax()

{

if (xajaxDebug) thisDebugMessage = function(text) { alert(Xajax Debug:\n + text) };

thisworkId = xajaxWork+ new Date()getTime();

thisdepth = ;

//Get the XMLHttpRequest Object

thisgetRequestObject = function()

{

if (xajaxDebug) thisDebugMessage(Initializing Request Object);

var req;

try

{

req=new ActiveXObject(MsxmlXMLHTTP);

}

catch (e)

{

try

{

req=new ActiveXObject(MicrosoftXMLHTTP);

}

catch (e)

{

req=null;

}

}

if(!req && typeof XMLHttpRequest != undefined)

req = new XMLHttpRequest();

if (xajaxDebug) {

if (!req) thisDebugMessage(Request Object Instantiation failed);

}

return req;

}

// xajax$() is shorthand for documentgetElementById()

this$ = function(sId)//$是什么?

{

return documentgetElementById(sId);

}

// xajaxinclude(sFileName) dynamically includes an external javascript file

thisinclude = function(sFileName)

{

var objHead = documentgetElementsByTagName(head);

var objScript = documentcreateElement(script);

objScripttype = text/javascript;

objScriptsrc = sFileName;

objHead[]appendChild(objScript);

}

// xajaxaddHandler adds an event handler to an element

thisaddHandler = function(sElementId sEvent sFunctionName)

{

if (windowaddEventListener)

{

//eval的含义?

eval(this$(+sElementId+)addEventListener(+sEvent++sFunctionName+false););

}

else

{

eval(this$(+sElementId+)attachEvent(on+sEvent++sFunctionName+fal**););

}

}

// *ajaxremoveHandler removes an event handler from an element

thisremoveHandler = function(sElementId sEvent sFunctionName)

{

if (windowaddEventListener)

{

eval(this$(+sElementId+)removeEventListener(+sEvent++sFunctionName+false););

}

else

{

eval(this$(+sElementId+)detachEvent(on+sEvent++sFunctionName+fal**););

}

}

// *ajaxcreate creates a new child node under a parent

thiscreate = function(sParentId sTag sId)

{

var objParent = this$(sParentId);

objElement = documentcreateElement(sTag);

objElementsetAttribute(idsId);

objParentappendChild(objElement);

}

// xajaxinsert inserts a new node before another node

thisinsert = function(sBeforeId sTag sId)

{

var objSibling = this$(sBeforeId);

objElement = documentcreateElement(sTag);

objElementsetAttribute(idsId);

objSiblingparentNodeinsertBefore(objElement objSibling);

}

thisgetInput = function(sType sName sId)

{

var Obj;

if (sType == radio && !windowaddEventListener)

{

alert(here);

Obj = documentcreateElement(<input type=radio id=+sId+ name=+sName+>);

}

else

{

Obj = documentcreateElement(input);

ObjsetAttribute(typesType);

ObjsetAttribute(namesName);

ObjsetAttribute(idsId);

}

return Obj;

}

// xajaxcreateInput creates a new input node under a parent

thiscreateInput = function(sParentId sType sName sId)

{

var objParent = this$(sParentId);

var objElement = thisgetInput(sType sName sId);

objParentappendChild(objElement);

}

// xajaxinsertInput creates a new input node before another node

thisinsertInput = function(sBeforeId sType sName sId)

{

var objSibling = this$(sBeforeId);

var objElement = thisgetInput(sType sName sId);

objSiblingparentNodeinsertBefore(objElement objSibling);

}

// xajaxremove deletes an element

thisremove = function(sId)

{

objElement = this$(sId);

if (objElementparentNode && objElementparentNoderemoveChild)

{

objElementparentNoderemoveChild(objElement);

}

}

//xajaxreplace searches for text in an attribute of an element and replaces it

//with a different text

thisreplace = function(sIdsAttributesSearchsReplace)

{

var bFunction = false;

eval(var txt=documentgetElementById(+sId+)+sAttribute);

if (typeof txt == function)

{

txt = txttoString();

bFunction = true;

}

if (txtindexOf(sSearch)>)

{

var newTxt = ;

while (txtindexOf(sSearch) > )

{

x = txtindexOf(sSearch)+sSearchlength+;

newTxt += txtsubstr(x)replace(sSearchsReplace);

txt = txtsubstr(xtxtlengthx);

}

newTxt += txt;

if (bFunction)

{

eval(newTxt = + newTxt);

eval(this$(+sId+)+sAttribute+=newTxt;);

}

else if (thiswillChange(sIdsAttributenewTxt))

{

eval(this$(+sId+)+sAttribute+=newTxt;);

}

}

}

// xajaxgetFormValues() builds a query string XML message from the elements of a form object

function Xajax()

{

if (xajaxDebug) thisDebugMessage = function(text) { alert(Xajax Debug:\n + text) };

thisworkId = xajaxWork+ new Date()getTime();

thisdepth = ;

//Get the XMLHttpRequest Object

thisgetRequestObject = function()

{

if (xajaxDebug) thisDebugMessage(Initializing Request Object);

var req;

try

{

req=new ActiveXObject(MsxmlXMLHTTP);

}

catch (e)

{

try

{

req=new ActiveXObject(MicrosoftXMLHTTP);

}

catch (e)

{

req=null;

}

}

if(!req && typeof XMLHttpRequest != undefined)

req = new XMLHttpRequest();

if (xajaxDebug) {

if (!req) thisDebugMessage(Request Object Instantiation failed);

}

return req;

}

// xajax$() is shorthand for documentgetElementById()

this$ = function(sId)//$是什么?

{

return documentgetElementById(sId);

}

// xajaxinclude(sFileName) dynamically includes an external javascript file

thisinclude = function(sFileName)

{

var objHead = documentgetElementsByTagName(head);

var objScript = documentcreateElement(script);

objScripttype = text/javascript;

objScriptsrc = sFileName;

objHead[]appendChild(objScript);

}

// xajaxaddHandler adds an event handler to an element

thisaddHandler = function(sElementId sEvent sFunctionName)

{

if (windowaddEventListener)

{

//eval的含义?

eval(this$(+sElementId+)addEventListener(+sEvent++sFunctionName+false););

}

else

{

eval(this$(+sElementId+)attachEvent(on+sEvent++sFunctionName+fal**););

}

}

// *ajaxremoveHandler removes an event handler from an element

thisremoveHandler = function(sElementId sEvent sFunctionName)

{

if (windowaddEventListener)

{

eval(this$(+sElementId+)removeEventListener(+sEvent++sFunctionName+false););

}

else

{

eval(this$(+sElementId+)detachEvent(on+sEvent++sFunctionName+fal**););

}

}

// *ajaxcreate creates a new child node under a parent

thiscreate = function(sParentId sTag sId)

{

var objParent = this$(sParentId);

objElement = documentcreateElement(sTag);

objElementsetAttribute(idsId);

objParentappendChild(objElement);

}

// xajaxinsert inserts a new node before another node

thisinsert = function(sBeforeId sTag sId)

{

var objSibling = this$(sBeforeId);

objElement = documentcreateElement(sTag);

objElementsetAttribute(idsId);

objSiblingparentNodeinsertBefore(objElement objSibling);

}

thisgetInput = function(sType sName sId)

{

var Obj;

if (sType == radio && !windowaddEventListener)

{

alert(here);

Obj = documentcreateElement(<input type=radio id=+sId+ name=+sName+>);

}

else

{

Obj = documentcreateElement(input);

ObjsetAttribute(typesType);

ObjsetAttribute(namesName);

ObjsetAttribute(idsId);

}

return Obj;

}

// xajaxcreateInput creates a new input node under a parent

thiscreateInput = function(sParentId sType sName sId)

{

var objParent = this$(sParentId);

var objElement = thisgetInput(sType sName sId);

objParentappendChild(objElement);

}

// xajaxinsertInput creates a new input node before another node

thisinsertInput = function(sBeforeId sType sName sId)

{

var objSibling = this$(sBeforeId);

var objElement = thisgetInput(sType sName sId);

objSiblingparentNodeinsertBefore(objElement objSibling);

}

// xajaxremove deletes an element

thisremove = function(sId)

{

objElement = this$(sId);

if (objElementparentNode && objElementparentNoderemoveChild)

{

objElementparentNoderemoveChild(objElement);

}

}

//xajaxreplace searches for text in an attribute of an element and replaces it

//with a different text

thisreplace = function(sIdsAttributesSearchsReplace)

{

var bFunction = false;

eval(var txt=documentgetElementById(+sId+)+sAttribute);

if (typeof txt == function)

{

txt = txttoString();

bFunction = true;

}

if (txtindexOf(sSearch)>)

{

var newTxt = ;

while (txtindexOf(sSearch) > )

{

x = txtindexOf(sSearch)+sSearchlength+;

newTxt += txtsubstr(x)replace(sSearchsReplace);

txt = txtsubstr(xtxtlengthx);

}

newTxt += txt;

if (bFunction)

{

eval(newTxt = + newTxt);

eval(this$(+sId+)+sAttribute+=newTxt;);

}

else if (thiswillChange(sIdsAttributenewTxt))

{

eval(this$(+sId+)+sAttribute+=newTxt;);

}

}

}

// xajaxgetFormValues() builds a query string XML message from the elements of a form object

thiscall = function(sFunction aArgs sRequestType)

{

var irpostData;

if (documentbody && xajaxWaitCursor)

documentbodystylecursor = wait;

if (xajaxStatusMessages == true) windowstatus = Sending Request;

if (xajaxDebug) thisDebugMessage(Starting xajax);

if (sRequestType == null) {

var xajaxRequestType = xajaxDefinedPost;

}

else {

var xajaxRequestType = sRequestType;

}

var uri = xajaxRequestUri;

var value;

switch(xajaxRequestType)

{

ca** *ajaxDefinedGet:{

var uriGet = uriindexOf(?)==??xajax=+encodeURIComponent(sFunction):&xajax=+encodeURIComponent(sFunction);

for (i = ; i<aArgslength; i++)

{

value = aArgs[i];

if (typeof(value)==object)

value = thisobjectToXML(value);

uriGet += &xajaxargs[]=+encodeURIComponent(value);

}

uriGet += &xajaxr= + new Date()getTime();

uri += uriGet;

postData = null;

} break;

ca** *ajaxDefinedPost:{

postData = xajax=+encodeURIComponent(sFunction);

postData += &xajaxr=+new Date()getTime();

for (i = ; i <aArgslength; i++)

{

value = aArgs[i];

if (typeof(value)==object)

value = thisobjectToXML(value);

postData = postData+&xajaxargs[]=+encodeURIComponent(value);

}

} break;

default:

alert(Illegal request type: + xajaxRequestType); return false; break;

}

r = thisgetRequestObject();

ropen(xajaxRequestType==xajaxDefinedGet?GET:POST uri true);

if (xajaxRequestType == xajaxDefinedPost)

{

try

{

rsetRequestHeader(Method POST + uri + HTTP/);

rsetRequestHeader(ContentType application/xwwwformurlencoded; charset= + xajaxCharEncoding);

}

catch(e)

{

alert(Your browser does not appear to support asynchronous requests using POST);

return false;

}

}

ronreadystatechange = function()

{

if (rreadyState != )

return;

if (rstatus==)

{

if (xajaxDebug && rresponseTextlength < ) xajaxDebugMessage(Received:\n + rresponseText);

else if (xajaxDebug) xajaxDebugMessage(Received:\n + rresponseTextsubstr()+\n[long response]\n</xajax>);

if (rrespon***ML)

xajaxprocessResponse(rrespon***ML);

else {

alert(Error: the XML response that was returned from the server is invalid);

documentbodystylecursor = default;

if (xajaxStatusMessages == true) windowstatus = Invalid XML response error;

}

}

delete r;

}

if (xajaxDebug) thisDebugMessage(Calling +sFunction + uri=+uri+ (post:+ postData +));

rsend(postData);

if (xajaxStatusMessages == true) windowstatus = Waiting for data;

delete r;

return true;

}

// Tests if the new Data is the same as the extant data

thiswillChange = function(element attribute newData)

{

if (!documentbody)

{

return true;

}

var oldData;

if (attribute == innerHTML)

{

tmpXajax = this$(thisworkId);

if (tmpXajax == null)

{

tmpXajax = documentcreateElement(div);

tmpXajaxsetAttribute(idthisworkId);

tmpXajaxstyledisplay = none;

tmpXajaxstylevisibility = hidden;

documentbodyappendChild(tmpXajax);

}

tmpXajaxinnerHTML = newData;

newData = tmpXajaxinnerHTML;

tmpXajaxinnerHTML = ;

}

eval(oldData=documentgetElementById(+element+)+attribute);

if (newData != oldData)

return true;

return false;

}

//Process XML xajaxResponses returned from the request

thisprocessResponse = function(xml)

{

if (xajaxStatusMessages == true) windowstatus = Processing;

var tmpXajax = null;

xml = xmldocumentElement;

if (xml == null) {

alert(Error: the XML response that was returned from the server cannot be processed);

documentbodystylecursor = default;

if (xajaxStatusMessages == true) windowstatus = XML response processing error;

return;

}

for (i=; i<xmlchildNodeslength; i++)

{

if (xmlchildNodes[i]nodeName == cmd)

{

var cmd;

var id;

var property;

var data;

var search;

var type;

var before;

for (j=; j<xmlchildNodes[i]attributeslength; j++)

{

if (xmlchildNodes[i]attributes[j]name == n)

{

cmd = xmlchildNodes[i]attributes[j]value;

}

if (xmlchildNodes[i]attributes[j]name == t)

{

id = xmlchildNodes[i]attributes[j]value;

}

if (xmlchildNodes[i]attributes[j]name == p)

{

property = xmlchildNodes[i]attributes[j]value;

}

if (xmlchildNodes[i]attributes[j]name == c)

{

type = xmlchildNodes[i]attributes[j]value;

}

}

if (xmlchildNodes[i]childNodeslength > )

{

for (j=; j<xmlchildNodes[i]childNodeslength; j++)

{

if (xmlchildNodes[i]childNodes[j]nodeName == s)

{

if (xmlchildNodes[i]childNodes[j]firstChild)

search = xmlchildNodes[i]childNodes[j]firstChildnodeValue;

}

if (xmlchildNodes[i]childNodes[j]nodeName == r)

{

if (xmlchildNodes[i]childNodes[j]firstChild)

data = xmlchildNodes[i]childNodes[j]firstChilddata;

}

}

}

else if (xmlchildNodes[i]firstChild)

data = xmlchildNodes[i]firstChildnodeValue;

else

data = ;

var objElement = this$(id);

try

{

if (cmd==al)

{

alert(data);

}

if (cmd==js)

{

eval(data);

}

if (cmd==in)

{

thisinclude(data);

}

if (cmd==as)

{

if (thiswillChange(idpropertydata))

{

eval(objElement+property+=data;);

}

}

if (cmd==ap)

{

eval(objElement+property++=data;);

}

if (cm*==**)

{

eval(objElement+property+=data+objElement+property);

}

if (cmd==rp)

{

thisreplace(idpropertysearchdata)

}

if (cmd==rm)

{

thisremove(id);

}

if (cmd==ce)

{

thiscreate(iddataproperty);

}

if (cmd==ie)

{

thisinsert(iddataproperty);

}

if (cmd==ci)

{

thiscreateInput(idtypedataproperty);

}

if (cmd==ii)

{

thisinsertInput(idtypedataproperty);

}

if (cmd==ev)

{

eval(this$(+id+)+property+= function(){+data+;});

}

if (cmd==ah)

{

thisaddHandler(id property data);

}

if (cmd==rh)

{

thisremoveHandler(id property data);

}

}

catch(e)

{

alert(e);

}

delete objElement;

delete cmd;

delete id;

delete property;

delete search;

delete data;

delete type;

delete before;

}

}

delete xml;

documentbodystylecursor = default;

if (xajaxStatusMessages == true) windowstatus = Done;

}

}

var xajax = new Xajax();

               

上一篇:javascript keyCode

下一篇:JavaScript 写 Log 类的具体实现