182 lines
7.4 KiB
JavaScript
Executable File
182 lines
7.4 KiB
JavaScript
Executable File
/*
|
|
ajaxcontentmws.js - Foteos Macrides (author and Copyright holder)
|
|
Initial: June 22, 2006 - Last Revised: March 2, 2007
|
|
Wrapper function set for getting and using the responseText and / or
|
|
responseXML from a GET or POST XMLHttpRequest, which can be used to
|
|
generate dynamic content for overlib or overlib2 calls, or to modify
|
|
the content of a displayed STICKY popup dynamically.
|
|
|
|
For GET Use:
|
|
onmouseover="return OLgetAJAX(url, command, delay, css);"
|
|
onmouseout="OLclearAJAX();" (if delay > 0)
|
|
or:
|
|
onclick="OLgetAJAX(url, command, 0, css); return false;"
|
|
or:
|
|
onload="OLgetAJAX(url, command, 0, css);
|
|
|
|
Where:
|
|
url (required)
|
|
is a quoted string, or unquoted string variable name or array entry, with
|
|
the full, relative, or partial URL for a file or a server-side script (php,
|
|
asp, or cgi, e.g. perl), and may have a query string appended (e.g.,
|
|
'http://my.domain.com/scripts/myScript.php?foo=bar&life=grand').
|
|
And:
|
|
command (required)
|
|
is the function reference (unquoted name without parens) of a function to
|
|
be called when the server's response has been received (it could instead be
|
|
an inline function, i.e., defined within the 2nd argument, or a quoted string
|
|
for a function with parens and any args)
|
|
And:
|
|
delay (may be omitted unless css is included)
|
|
is an unquoted number indicating the number of millisecs to wait before
|
|
initiating an XMLHttpRequest GET request. It should be 0 when using onclick
|
|
or onload, but may be a modest value such as 300 for onmouseover to avoid
|
|
any chatter of requests. When used with onmouseover, include:
|
|
onmouseout="OLclearAJAX();"
|
|
to clear the request if the user does not hover for at least that long. If
|
|
the popup is not STICKY, include an nd or nd2 call, e.g.,
|
|
onmouseout="OLclearAJAX(); nd();"
|
|
And:
|
|
css (may be omitted)
|
|
is a quoted string with the CSS class (e.g. 'ovfl510' for
|
|
.ovfl510 {width:510px; height:145px; overflow:auto; ...} ) for a div to
|
|
encase the responseText and set the width, height and scrollbars in the
|
|
main text area of the popup, or the unquoted number 0 if no encasing div
|
|
is to be used.
|
|
|
|
For POST substitute OLpostAJAX(url, qry, command, delay, css);
|
|
Where
|
|
qry (required)
|
|
is the string to be posted, typically a query string (without a lead ?)
|
|
and the other arguments are as above.
|
|
|
|
See http://www.macridesweb.com/oltest/AJAX.html for more information.
|
|
*/
|
|
|
|
// Initialize our global variables for this function set.
|
|
var OLhttp=false,OLcommandAJAX=null,OLdelayidAJAX=0,OLclassAJAX='',
|
|
OLresponseAJAX='',OLdebugAJAX=false;
|
|
|
|
// Create a series of wrapper functions (e.g. OLcmdT#() for ones which
|
|
// use OLhttp.responseText via the OLresponseAJAX global, and OLcmdX#()
|
|
// for ones which use OLhttp.responseXML) whose reference (unquoted name
|
|
// without parens) is the 2nd argument in OLgetAJAX(url,command,delay,css)
|
|
// calls. This one is for the first example in the AJAX.html support
|
|
// document, to use the OLresponseAJAX global as the lead argument for an
|
|
// overlib popup. Put your functions in the head, or in another imported
|
|
// .js file, so that they will not be affected by updates of this .js file.
|
|
//
|
|
function OLcmdExT1() {
|
|
return overlib(OLresponseAJAX, TEXTPADDING,0, CAPTIONPADDING,4,
|
|
CAPTION,'Example with AJAX content via <span '
|
|
+'class="yellow">responseText</span>. Popup scrolls with the window.',
|
|
WRAP, BORDER,2, STICKY, CLOSECLICK, SCROLL,
|
|
MIDX,0, RELY,100,
|
|
STATUS,'Example with AJAX content via responseText of XMLHttpResponse');
|
|
}
|
|
|
|
// Alert for old browsers which lack XMLHttpRequest support.
|
|
function OLsorryAJAX() {
|
|
alert('Sorry, AJAX is not supported by your browser.');
|
|
return false;
|
|
}
|
|
|
|
// Check 2nd arg for function
|
|
function OLchkFuncAJAX(ar){
|
|
var t=typeof ar;return (((t=='function'))||((t=='string')&&(/.+\(.*\)/.test(ar))));
|
|
}
|
|
|
|
// Alert for bad 2nd argument
|
|
function OLnotFuncAJAX(m) {
|
|
if(over)cClick();
|
|
alert('The 2nd arg of OL'+m+'AJAX is not a function reference, nor an inline function, '
|
|
+'nor a quoted string with a function indicated.');
|
|
return OLclearAJAX();
|
|
}
|
|
|
|
// Alert for indicating an XMLHttpRequest network error.
|
|
function OLerrorAJAX() {
|
|
alert('Network error '+OLhttp.status+'. Try again later.');
|
|
return false;
|
|
}
|
|
|
|
// Returns a new XMLHttpRequest object, or false for older browsers
|
|
// which did not yet support it. Called as OLhttp=OLnewXMLHttp() via
|
|
// the OLgetAJAX(url,command,delay,css) wrapper function.
|
|
//
|
|
function OLnewXMLHttp() {
|
|
var f=false,req=f;
|
|
if(window.XMLHttpRequest)eval(new Array('try{',
|
|
'req=new XMLHttpRequest();','}catch(e){','req=f;','}').join('\n'));
|
|
/*@cc_on @if(@_jscript_version>=5)if(!req)
|
|
eval(new Array('try{','req=new ActiveXObject("Msxml2.XMLHTTP");',
|
|
'}catch(e){','try{','req=new ActiveXObject("Microsoft.XMLHTTP");',
|
|
'}catch(e){','req=f;','}}').join('\n')); @end @*/
|
|
return req;
|
|
}
|
|
|
|
// Handle the OLhttp.responseText string from the XMLHttpRequest object.
|
|
function OLdoAJAX() {
|
|
if(OLhttp.readyState==4){
|
|
if(OLdebugAJAX)alert(
|
|
'OLhttp.status = '+OLhttp.status+'\n'
|
|
+'OLhttp.statusText = '+OLhttp.statusText+'\n'
|
|
+'OLhttp.getAllResponseHeaders() = \n'
|
|
+OLhttp.getAllResponseHeaders()+'\n'
|
|
+'OLhttp.getResponseHeader("Content-Type") = '
|
|
+OLhttp.getResponseHeader("Content-Type")+'\n');
|
|
if(!OLhttp.status||OLhttp.status==200){
|
|
OLresponseAJAX=OLclassAJAX?'<div class="'+OLclassAJAX+'">':'';
|
|
OLresponseAJAX += OLhttp.responseText;
|
|
OLresponseAJAX += OLclassAJAX?'</div>':'';
|
|
if(OLdebugAJAX)alert('OLresponseAJAX = \n'+OLresponseAJAX);
|
|
OLclassAJAX=0;
|
|
return (typeof OLcommandAJAX=='string')?eval(OLcommandAJAX):OLcommandAJAX();
|
|
}else{
|
|
OLclassAJAX=0;
|
|
return OLerrorAJAX();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Actually make the request initiated via OLgetAJAX or OLpostAJAX, or
|
|
// invoke a "permission denied" alert if a cross-domain URL was used.
|
|
function OLsetAJAX(url,qry) {
|
|
qry=(qry||null);var s='',m=(qry)?'POST':'GET';
|
|
OLdelayidAJAX=0;eval(new Array('try{','OLhttp.open(m,url,true);',
|
|
'}catch(e){','s=e','OLhttp=false;','}').join('\n'));if(!OLhttp){
|
|
alert(s+'\n(Cross-domain access not permitted)');return false;}if(qry)
|
|
OLhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
|
|
OLhttp.onreadystatechange=OLdoAJAX;
|
|
OLhttp.send(qry);
|
|
}
|
|
|
|
// Clear or abort any delayed OLsetAJAX call or pending request.
|
|
function OLclearAJAX() {
|
|
if(OLdelayidAJAX){clearTimeout(OLdelayidAJAX);OLdelayidAJAX=0;}
|
|
if(OLhttp&&!OLdebugAJAX){OLhttp.abort();OLhttp=false;}
|
|
return false;
|
|
}
|
|
|
|
// Load a new XMLHttpRequest object into the OLhttp global, load the
|
|
// OLcommandAJAX and OLclassAJAX globals, and initiate a GET request
|
|
// via OLsetAJAX(url) to populate OLhttp.
|
|
function OLgetAJAX(url,command,delay,css) {
|
|
if(!OLchkFuncAJAX(command))return OLnotFuncAJAX('get');
|
|
OLclearAJAX();OLhttp=OLnewXMLHttp();if(!OLhttp)return OLsorryAJAX();
|
|
OLcommandAJAX=command;delay=(delay||0);css=(css||0);OLclassAJAX=css;
|
|
if(delay)OLdelayidAJAX=setTimeout("OLsetAJAX('"+url+"')",delay);
|
|
else OLsetAJAX(url);
|
|
}
|
|
|
|
// Load a new XMLHttpRequest object into the OLhttp global, load the
|
|
// OLcommandAJAX and OLclassAJAX globals, and initiate a POST request
|
|
// via OLsetAJAX(url,qry) to populate OLhttp.
|
|
function OLpostAJAX(url,qry,command,delay,css) {
|
|
if(!OLchkFuncAJAX(command))return OLnotFuncAJAX('post');
|
|
OLclearAJAX();OLhttp=OLnewXMLHttp();if(!OLhttp)return OLsorryAJAX();
|
|
qry=(qry||0);OLcommandAJAX=command;delay=(delay||0);css=(css||0);OLclassAJAX=css;
|
|
if(delay)OLdelayidAJAX=setTimeout("OLsetAJAX('"+url+"','"+qry+"')",delay);
|
|
else OLsetAJAX(url,qry);
|
|
}
|