我正在制作Delphi XE5 VCL表单应用程序,主表单上有一个TIdHTTPServer
和CommandGet
程序的IdHTTPServer
:
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标签中插入表格)。
答案 0 :(得分:3)
对于部分页面刷新,您可以使用JavaScript / Ajax,例如使用类似jQuery的框架。 Web上有许多使用Ajax进行动态页面更新的示例。
Ajax调用将请求作为HTTP GET或POST请求提交给HTTP服务器。 IdHTTPServerCommandGet中的代码检查请求是否与URL和HTTP方法匹配,然后构建并返回部分HTML代码。
在客户端,JavaScript代码将收到的部分HTML放在指定的文档树位置。
参见例如:
https://stackoverflow.com/a/3644604/80901
更新:基于jQuery Ajax的演示可以在http://www.habariwebcomponents.de/demo/ajaxstats.html Delphi source找到(基于我的Delphi和Free Pascal的HTTP服务库)