Forum > Networking and Web Programming
fpWeb CGI module.
BSaidus:
Hello.
I'm doing some tests to learn the wonderfull "fpWEB", and I wonder how to : after posting data to server (using GET methode) how to force browser to clear the string parameters to avoid the refresh.
here is the code.
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---// main datamoduleprocedure TWmUccenpf.DataModuleRequest(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);var lContent: String;begin Handled := true; // See if the methode is post if SysUtils.SameText(LowerCase(ARequest.Method ),'get' ) then begin tUcExec.fpLog('Methode GET invoked'); // just log a string tUccenPf.fpProcessUccenPf(ARequest); // do some saving data to file ( db ) end; // send content to browser 'html template from file' AResponse.ContentType := 'text/html'; lContent := tUccenPf.fpProcessCountent(); // Get content from html tempplate AResponse.Content := lContent; AResponse.SendContent();end;
After returning, in the parameters on URL still exists
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---https://forum.lazarus.freepascal.org/index.php?action=post;board=38.0// how to redirect to https://forum.lazarus.freepascal.org/index.php
So, Is there any way or technique to do this.
in PHP just this
--- Code: PHP [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---function fpTools_goto_url($AUrl) { header("location: http://$AUrl") ; exit();}
Leledumbo:
--- Quote from: BSaidus on April 20, 2023, 01:41:55 pm ---after posting data to server (using GET methode)
--- End quote ---
Wait, what? %)
--- Quote from: BSaidus on April 20, 2023, 01:41:55 pm ---how to force browser to clear the string parameters to avoid the refresh.
--- End quote ---
You typically don't for a GET request, but since you said:
--- Quote from: BSaidus on April 20, 2023, 01:41:55 pm ---in PHP just this
--- End quote ---
What you want to reply is a redirect response:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---AResponse.SendRedirect('http://wherever.you/want/to/redirect/it/to');
BSaidus:
Thank you @Leledumbo.
When I said posting data using GET methode I mean like this.
--- Code: Text [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} --- <form name="fr_action1" id="fr_ction1" method="get" action="#"> <button name="bt_ucccen1" id="bt_ucccen10" class="input-btn-green" type="submit" value="bt_save10"> Do action1</button> </form> Yes, this methode
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---AResponse.SendRedirect('http://wherever.you/want/to/redirect/it/to'); works well when using GET, and do not work when using POST.
Something else, this is a result of quering server variables using fpWeb. Do not you think that there is something messing .
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);var lURL, lURI: String; lContent: String;begin Handled := true; lURI := ARequest.URI; lURL := ARequest.URL; lContent := LineEnding + 'ARequest.Accept : ' + ARequest.Accept + #10#13 + 'ARequest.AcceptCharset : ' + ARequest.AcceptCharset + #10#13 + 'ARequest.AcceptEncoding : ' + ARequest.AcceptEncoding + #10#13 + 'ARequest.AcceptLanguage : ' + ARequest.AcceptLanguage + #10#13 + 'ARequest.Authorization : ' + ARequest.Authorization + #10#13 + 'ARequest.Connection : ' + ARequest.Connection + #10#13 + 'ARequest.ContentEncoding : ' + ARequest.ContentEncoding + #10#13 + 'ARequest.ContentLanguage : ' + ARequest.ContentLanguage + #10#13 + 'ARequest.ContentLength : ' + IntToStr(ARequest.ContentLength) + #10#13 + 'ARequest.ContentType : ' + ARequest.ContentType + #10#13 + 'ARequest.Date : ' + ARequest.Date + #10#13 + 'ARequest.Expires : ' + ARequest.Expires + #10#13 + 'ARequest.From : ' + ARequest.From + #10#13 + 'ARequest.Host : ' + ARequest.Host + #10#13 + 'ARequest.IfModifiedSince : ' + ARequest.IfModifiedSince + #10#13 + 'ARequest.LastModified : ' + ARequest.LastModified + #10#13 + 'ARequest.Location : ' + ARequest.Location + #10#13 + 'ARequest.Pragma : ' + ARequest.Pragma + #10#13 + 'ARequest.Referer : ' + ARequest.Referer + #10#13 + 'ARequest.RetryAfter : ' + ARequest.RetryAfter + #10#13 + 'ARequest.Server : ' + ARequest.Server + #10#13 + 'ARequest.UserAgent : ' + ARequest.UserAgent + #10#13 + 'ARequest.Warning : ' + ARequest.Warning + #10#13 + 'ARequest.WWWAuthenticate : ' + ARequest.WWWAuthenticate + #10#13 + 'ARequest.Via : ' + ARequest.Via + #10#13 + 'ARequest.HTTPAccept : ' + ARequest.HTTPAccept + #10#13 + 'ARequest.HTTPAcceptCharset : ' + ARequest.HTTPAcceptCharset + #10#13 + 'ARequest.HTTPAcceptEncoding : ' + ARequest.HTTPAcceptEncoding + #10#13 + 'ARequest.HTTPIfModifiedSince : ' + ARequest.HTTPIfModifiedSince + #10#13 + 'ARequest.HTTPReferer : ' + ARequest.HTTPReferer + #10#13 + 'ARequest.HTTPUserAgent : ' + ARequest.HTTPUserAgent + #10#13 + 'ARequest.Cookie : ' + ARequest.Cookie + #10#13 + 'ARequest.SetCookie : ' + ARequest.SetCookie + #10#13 + 'ARequest.HTTPXRequestedWith : ' + ARequest.HTTPXRequestedWith + #10#13 + 'ARequest.HttpVersion : ' + ARequest.HttpVersion + #10#13 + 'ARequest.ProtocolVersion : ' + ARequest.ProtocolVersion + #10#13 + 'ARequest.PathInfo : ' + ARequest.PathInfo + #10#13 + 'ARequest.PathTranslated : ' + ARequest.PathTranslated + #10#13 + 'ARequest.RemoteAddress : ' + ARequest.RemoteAddress + #10#13 + 'ARequest.RemoteAddr : ' + ARequest.RemoteAddr + #10#13 + 'ARequest.RemoteHost : ' + ARequest.RemoteHost + #10#13 + 'ARequest.ScriptName : ' + ARequest.ScriptName + #10#13 + 'ARequest.ServerPort : ' + IntToStr(ARequest.ServerPort) + #10#13 + 'ARequest.Method : ' + ARequest.Method + #10#13 + 'ARequest.URL : ' + ARequest.URL + #10#13 + 'ARequest.Query : ' + ARequest.Query + #10#13 + 'ARequest.Content : ' + ARequest.Content + #10#13 ; fpLog(lContent); end;
RESULTS:
--- Code: Text [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---ARequest.Server : localhostARequest.ScriptName : /fb1c/index.cgiARequest.ServerPort : 80ARequest.HttpVersion : ARequest.ProtocolVersion : ARequest.Accept : text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8ARequest.AcceptCharset : ARequest.AcceptEncoding : gzip, deflate, brARequest.AcceptLanguage : en-US,en;q=0.5ARequest.Authorization : ARequest.Connection : keep-aliveARequest.ContentEncoding : ARequest.ContentLanguage : ARequest.ContentLength : 0ARequest.ContentType : ARequest.Date : ARequest.Expires : ARequest.From : ARequest.Host : localhostARequest.IfModifiedSince : ARequest.LastModified : ARequest.Location : ARequest.Pragma : ARequest.Referer : ARequest.RetryAfter : ARequest.UserAgent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0ARequest.Warning :ARequest.WWWAuthenticate :ARequest.Via :ARequest.HTTPAccept : text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8ARequest.HTTPAcceptCharset :ARequest.HTTPAcceptEncoding : gzip, deflate, brARequest.HTTPIfModifiedSince :ARequest.HTTPReferer :ARequest.HTTPUserAgent : ARequest.Cookie : ARequest.SetCookie : ARequest.HTTPXRequestedWith : ARequest.HttpVersion : ARequest.ProtocolVersion : ARequest.PathInfo : ARequest.PathTranslated : ARequest.RemoteAddress : 127.0.0.1ARequest.RemoteAddr : 127.0.0.1ARequest.RemoteHost : ARequest.Method : GETARequest.URL : ARequest.Query : ARequest.Content :
PS: I'm using Lighttpd 1.4.49.1 on windows
PHP output this:
--- Code: Text [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---CONTENT_LENGTH 0DOCUMENT_ROOT D:/UccenOS/UccenOS/Servers/lighttpd/htdocsGATEWAY_INTERFACE CGI/1.1HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8HTTP_ACCEPT_ENCODING gzip, deflate, brHTTP_ACCEPT_LANGUAGE en-US,en;q=0.5HTTP_CONNECTION keep-aliveHTTP_HOST localhostHTTP_SEC_FETCH_DEST documentHTTP_SEC_FETCH_MODE navigateHTTP_SEC_FETCH_SITE noneHTTP_SEC_FETCH_USER ?1HTTP_UPGRADE_INSECURE_REQUESTS 1HTTP_USER_AGENT Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0REDIRECT_STATUS 200REMOTE_ADDR 127.0.0.1REMOTE_PORT 51430REQUEST_METHOD GETREQUEST_SCHEME httpREQUEST_URI /fb1c/a.phpSCRIPT_FILENAME D:/UccenOS/UccenOS/Servers/lighttpd/htdocs/fb1c/a.phpSCRIPT_NAME /fb1c/a.phpSERVER_ADDR 127.0.0.1SERVER_NAME localhostSERVER_PORT 80SERVER_PROTOCOL HTTP/1.1SERVER_SOFTWARE lighttpd/1.4.49 (win32)SYSTEMROOT C:\WindowsWINDIR C:\WindowsPATH D:\UccenOS\UccenOS\Servers\lighttpd
Leledumbo:
--- Quote from: BSaidus on April 22, 2023, 10:42:13 am ---Do not you think that there is something messing .
--- End quote ---
No, but also do note that not all headers are parsed and stored to its own property, as not all are standard.
Those non-standard headers can be queried with THTTPHeader.CustomHeaders, which you can also set as response headers, so you wish. Web servers like Lighttpd also tend to add their own headers, for identification inside the user program if necessary, which are some that you see.
BSaidus:
Hello @Leledumbo
A how about
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} --- AResponse.SendRedirect('http://localhost/index.cgi'); while using POST, using
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---GET [/color]it works but not with POST.
I bypassed this problem using this code.
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---class procedure tUccenPf.fpSendRedirect(AResponse: TResponse; AURL: String);begin AResponse.SetCustomHeader('METHODE', 'GET'); AResponse.SendHeaders(); AResponse.SendRedirect( AURL );end; { -------------------------------------------------------------------------------------- }{ // Suppose that method is POST }{ -------------------------------------------------------------------------------------- }class procedure tUccenPf.fpProcessUccenPf(ARequest: TRequest; AResponse: TResponse);var lName: String; lURLToRedirect: String;begin lURLToRedirect := fpRequest2URL(ARequest); // Get the URL (http://localhost/index.cgi) lName := ARequest.ContentFields.Values['bt_ucccen1'] ; if System.Pos('bt_save0', lName) > 0 then begin tUcExec.fpLog('[bt_save0] saving general network configuration'); fpProcessDbParameters(ARequest); Self.fpSendRedirect(AResponse, lURLToRedirect); Exit; end;end; I simply modify the POST =>(to) GET in ARespnse Header.
Navigation
[0] Message Index
[#] Next page