diff options
Diffstat (limited to 'httemplate/elements/xmlhttp.html')
| -rw-r--r-- | httemplate/elements/xmlhttp.html | 125 | 
1 files changed, 125 insertions, 0 deletions
| diff --git a/httemplate/elements/xmlhttp.html b/httemplate/elements/xmlhttp.html new file mode 100644 index 000000000..d0c799095 --- /dev/null +++ b/httemplate/elements/xmlhttp.html @@ -0,0 +1,125 @@ +<%doc> + +Example: + +  include( '/elements/xmlhttp.html', +    # required +    'url'  => $p.'misc/something.html', +    'subs' => [ 'subroutine' ], + +    # optional +    'method' => 'GET', #defaults to GET, could specify POST +    'key'    => 'unique', #unique key + +  ); + +</%doc> +<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 <%$key%><%$func%>() { +        // count args; build URL +        var url = "<%$furl%>"; +        var a = <%$key%><%$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> +<%init> +my ( %opt ) = @_; + +my $url = $opt{'url'}; +my $method = exists($opt{'method'}) ? $opt{'method'} : 'GET'; +#my @subs = @{ $opt{'subs'}; +my $key = exists($opt{'key'}) ? $opt{'key'} : ''; + +$url .= ( ($url =~ /\?/) ? '&' : '?' ) +  if $method eq 'GET'; + +</%init> | 
