X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Felements%2Fxmlhttp.html;h=e034388229e3237ba0af62f6d43ffa21f0ac7fec;hb=36d9b47e5c20ae3bc71c0bd0eaf289b566d0cf7c;hp=41965ace204c10acd5b0daf0838d7fdc77ae6898;hpb=76161f1a2ae0f96470bed4089b00eff5abb16cff;p=freeside.git diff --git a/httemplate/elements/xmlhttp.html b/httemplate/elements/xmlhttp.html index 41965ace2..e03438822 100644 --- a/httemplate/elements/xmlhttp.html +++ b/httemplate/elements/xmlhttp.html @@ -2,11 +2,12 @@ my ( %opt ) = @_; my $url = $opt{'url'}; - #my $action = exists $opt{'action'} ? $opt{'action'} : 'GET'; + my $method = exists($opt{'method'}) ? $opt{'method'} : 'GET'; #my @subs = @{ $opt{'subs'}; + my $key = exists($opt{'key'}) ? $opt{'key'} : ''; - $url .= ( ($url =~ /\?/) ? '&' : '?' ). - 'sub='; + $url .= ( ($url =~ /\?/) ? '&' : '?' ) + if $method eq 'GET'; %> @@ -33,43 +34,73 @@ <% foreach my $func ( @{$opt{'subs'}} ) { - my $furl = $url . uri_escape($func); + my $furl = $url; $furl =~ s/\"/\\\\\"/; #javascript escape %> - function <%=$func%>() { - // count args; build URL - var url = "<%=$furl%>"; - var a = <%=$func%>.arguments; - var args; - var len; - if ( a && typeof a == 'object' && a[0].constructor == Array ) { - args = a[0]; + 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 { + } else { args = a; len = args.length - 1; - } - for (var i = 0; i < len; i++) - url = url + "&arg=" + escape(args[i]); - url = url.replace( /[+]/g, '%2B'); // fix the unescaped plus signs - var xmlhttp = rs_init_object(); - xmlhttp.open("GET", url, true); - xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); - xmlhttp.onreadystatechange = function() { - if (xmlhttp.readyState != 4) - return; - //rs_debug("received " + x.responseText); - - if (xmlhttp.status != 200) { - alert(xmlhttp.status + " status connecting to " + url); - } else { + } + 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("System error") > -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"); + } + } } } - xmlhttp.send(null); + + 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.."); }