diff options
Diffstat (limited to 'httemplate/elements/xmlhttp.html')
-rw-r--r-- | httemplate/elements/xmlhttp.html | 109 |
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> |