如何调用 Delphi 程序来生成 HTML 页面内容
Posted
技术标签:
【中文标题】如何调用 Delphi 程序来生成 HTML 页面内容【英文标题】:How can I call a Delphi procedure to generate HTML page content 【发布时间】:2014-06-28 03:30:33 【问题描述】:我正在制作一个 Delphi XE5 VCL 表单应用程序,主表单上有一个 TIdHTTPServer
,IdHTTPServer
过程中有一个 CommandGet
:
procedure TForm1.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var pageContent: TStringList;
begin
if pos('profile&userName=', ARequestInfo.UnparsedParams) > 0 then
begin
pageContent:= TStringList.Create;
try
pageContent.Add('<html>');
pageContent.Add('<head>');
pageContent.Add('<title>Profile</title>');
pageContent.Add('</head>');
pageContent.Add('<body>');
pageContent.Add('<h1>Profile<h1>');
pageContent.Add
('<input id="subjects" value="Subjects" type="button"/>');
pageContent.Add('<div id="table-content">');
pageContent.Add('</div>');
pageContent.Add('</body>');
pageContent.Add('</html>');
AResponseInfo.ContentText := pageContent.Text;
finally
pageContent.Free;
end;
end;
end;
我想要做的是当用户单击按钮“Subjects
”来调用这个函数,该函数会生成一个包含学生课程和分数的 HTML 表格。该函数从数据库中读取数据并生成一个表。我想避免重新加载整个页面(我尝试在 div 标签中插入表格)。
【问题讨论】:
您的代码正在泄漏内存:确保在不再需要时调用pageContent.Free
。
@ArnaudBouchez:谢谢,刚刚修好了
【参考方案1】:
对于部分页面刷新,您可以使用 javascript / Ajax,例如使用 jQuery 之类的框架。网上有很多使用 Ajax 进行动态页面更新的示例。
Ajax 调用将请求作为 HTTP GET 或 POST 请求提交给 HTTP 服务器。 IdHTTPServerCommandGet 中的代码检查请求是否匹配 URL 和 HTTP 方法,然后构建并返回部分 HTML 代码。
在客户端,JavaScript 代码将接收到的部分 HTML 放置在指定的文档树位置。
参见示例:
https://***.com/a/3644604/80901
更新:可以在http://www.habariwebcomponents.de/demo/ajaxstats.html 和Delphi source 找到一个基于 jQuery Ajax 的演示(基于我的 Delphi 和 Free Pascal 的 HTTP 服务库)
【讨论】:
即使没有 AJAX,OnCommandGet
处理程序仍然需要查看被请求的 URL,然后根据需要返回适当的内容,无论是原始 HTML 网络表单还是学生数据。以上是关于如何调用 Delphi 程序来生成 HTML 页面内容的主要内容,如果未能解决你的问题,请参考以下文章
Delphi 后端随机生成前端验证码图片程序源代码,开箱即用