summaryrefslogtreecommitdiff
path: root/httemplate/elements/xmlhttp.html
diff options
context:
space:
mode:
Diffstat (limited to 'httemplate/elements/xmlhttp.html')
-rw-r--r--httemplate/elements/xmlhttp.html109
1 files changed, 109 insertions, 0 deletions
diff --git a/httemplate/elements/xmlhttp.html b/httemplate/elements/xmlhttp.html
new file mode 100644
index 000000000..28130e501
--- /dev/null
+++ b/httemplate/elements/xmlhttp.html
@@ -0,0 +1,109 @@
+<%
+ my ( %opt ) = @_;
+
+ my $url = $opt{'url'};
+ my $method = exists($opt{'method'}) ? $opt{'method'} : 'GET';
+ #my @subs = @{ $opt{'subs'};
+
+ $url .= ( ($url =~ /\?/) ? '&' : '?' )
+ if $method eq 'GET';
+
+%>
+
+<SCRIPT TYPE="text/javascript">
+
+ function rs_init_object() {
+ var A;
+ try {
+ A=new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ try {
+ A=new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (oc) {
+ A=null;
+ }
+ }
+ if(!A && typeof XMLHttpRequest != "undefined")
+ A = new XMLHttpRequest();
+ if (!A)
+ alert("Can't create XMLHttpRequest object");
+ return A;
+
+ }
+
+ <% foreach my $func ( @{$opt{'subs'}} ) {
+
+ my $furl = $url;
+ $furl =~ s/\"/\\\\\"/; #javascript escape
+
+ %>
+
+ function <%=$func%>() {
+ // count args; build URL
+ var url = "<%=$furl%>";
+ var a = <%=$func%>.arguments;
+
+ var args;
+ var len;
+ var content = 'sub=<%= uri_escape($func) %>';
+ if ( a && typeof a == 'object' && a[0].constructor == Array ) {
+ args = a[0];
+ len = args.length
+ } else {
+ args = a;
+ len = args.length - 1;
+ }
+ for (var i = 0; i < len; i++)
+ content = content + "&arg=" + escape(args[i]);
+ content = content.replace( /[+]/g, '%2B'); // fix unescaped plus signs
+
+ if ( '<%=$method%>' == 'GET' ) {
+ url = url + content;
+ }
+
+ //alert('<%=$method%> ' + url);
+
+ var xmlhttp = rs_init_object();
+ xmlhttp.open("<%=$method%>", url, true);
+
+ xmlhttp.onreadystatechange = function() {
+ if (xmlhttp.readyState != 4)
+ return;
+
+ if (xmlhttp.status != 200) {
+ alert(xmlhttp.status + " status connecting to " + url);
+ } else {
+ var data = xmlhttp.responseText;
+ //alert('received response: ' + data);
+ a[a.length-1](data);
+ if ( data.indexOf("<b>System error</b>") > -1 ) {
+ var w;
+ if ( w = window.open("about:blank") ) {
+ w.document.write(data);
+ } else {
+ // popup blocking? should use an overlib popup instead
+ alert("Error popup disabled; try disabling popup blocking to see");
+ }
+ }
+ }
+ }
+
+ if ( '<%=$method%>' == 'POST' ) {
+
+ xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+ xmlhttp.send(content);
+
+ } else {
+
+ xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
+ xmlhttp.send(null);
+
+ }
+
+ //rs_debug("x_$func_name url = " + url);
+ //rs_debug("x_$func_name waiting..");
+ }
+
+ <% } %>
+
+</SCRIPT>