我创建了一个FMX Windows应用程序,它连接到Web服务器以获取REST数据。我一直在使用REST客户端,响应,请求和ResponseDataAdapter,并将其连接到客户端数据集。然后我通过实时绑定将数据集连接到字符串网格。我已经为2个不同的字符串网格做了这个,没有任何问题,然后我来到我想做的最后一个请求,我得到一些非常奇怪的行为。我在数据模块中设置了所有内容,并在IDE中执行了RestRequest,并获得了我在RESTResponse中预期的内容。然后我激活了RESTResponseAdapter和ClientDataset。填充了clientdata集,我只需要添加字段就可以通过ide添加fielddef。
我在应用程序上设置了计时器以更新字符串网格等,对两个字符串网格工作正常。但是在最后一个上,我在StringGrid上得到的是我最初在IDE中获取的数据。我假设这可能是由于clientdataset上的一些缓存,所以我在表单上放了一个备忘录,并在每次请求执行后我将响应内容发布到备忘录....奇怪的是我偶尔得到响应服务器是目前发回(通过Chrome访问网络服务器验证),但有时响应内容是我在IDE中设置时最初请求的数据。所以我回到IDE并清除了Rest Response的响应数据。再次尝试并得到相同的...我有时得到预期的结果,有时我得到我昨天在IDE中最初得到的响应。所以我想也许网络服务器正在把它发回去。因此,通过网络服务器运行相同的REST请求,永远不会收回restresponse显示的数据......
以下代码触发我的计时器。前两组代码工作正常,最后一组是有缺陷的代码。
restDataModule.adapterOperators.ClearDataSet;
restDataModule.cdsOperators.Close;
restDataModule.responseOperators.Content.Empty;
restDataModule.reqOnlineOperators.ClearBody;
restDataModule.reqOnlineOperators.Execute;
restDataModule.cdsOperators.Open;
restDataModule.adapterStats.ClearDataSet;
restDataModule.cdsStats.Close;
restDataModule.responseOperatorStats.Content.Empty;
restDataModule.reqOperatorStats.ClearBody;
restDataModule.reqOperatorStats.Execute;
restDataModule.cdsStats.Open;
try
restDataModule.adapterChats.ClearDataSet;
restDataModule.cdsChats.Close;
restDataModule.responseChats.Content.Empty;
restDataModule.reqChats.ClearBody;
restDataModule.reqChats.Execute;
restDataModule.cdsChats.Open;
except on E: Exception do
// ignore
memo1.Lines.Add('Failed!')
end;
memo1.Lines.Add(restDataModule.responseChats.Content);
欢迎任何建议。
答案 0 :(得分:0)
好的解决方法是使用以下设置将参数添加到RestClient: - Kind = pkHTTPHEADER Name = Cache-Control 值=无缓存
简单但难以捉摸