如何调用 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 表单应用程序,主表单上有一个 TIdHTTPServerIdHTTPServer 过程中有一个 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怎么使用

Delphi 后端随机生成前端验证码图片程序源代码,开箱即用

delphi中如何把一个webbroker生成的dll在ie中打开?

DELPHI如何调用页面里的JS

ExcelVBA如何调用API DLL(Delphi生成)

在Delphi中到底是如何操作HTML文件的啊,谁来讲解一下啊