2015-02-11 71 views
1

我已经写代码,使用与印IdHTTP组件如何读取印IdHTTP响应得到

var 
get_url: string; 
resp: TMemoryStream; 
begin 
    get_url := 'http://localhost/salesapp/is_run.php?ser='; 
    resp := TMemoryStream.Create; 

    IdHTTP1.Get(get_url+'v', resp); 
    memo1.Lines.LoadFromStream(resp); 

此网址http://localhost/salesapp/is_run.php?ser=v返回JSON响应得到,但我不知道如何从德尔福阅读。

+0

这是一种已知的格式,还是您自己制作的? – TLama 2015-02-11 19:32:56

+0

你的意思是PHP的回应?我使用了'fetchAll(PDO :: FETCH_ASSOC)' – Wel 2015-02-11 19:36:40

+0

问题是你需要Delphi客户端的解析器,并且我怀疑原始PHP结果集中有一个解析器。您应该以某种已知格式与客户端交换数据,例如XML或JSON。 – TLama 2015-02-11 19:46:00

回答

6

Get()退出时,流的Position位于流的末尾。你需要调用LoadFromStream()之前的Position重置为0,否则它不会有什么负担:

var 
    get_url: string; 
    resp: TMemoryStream; 
begin 
    get_url := 'http://localhost/salesapp/is_run.php?ser='; 
    resp := TMemoryStream.Create; 
    try 
    IdHTTP1.Get(get_url+'v', resp); 
    resp.Position := 0; // <-- add this!! 
    memo1.Lines.LoadFromStream(resp); 
    finally 
    resp.Free; 
    end; 
end; 

另一种方法是去除TMemoryStream,让Get()回报JSON作为String代替:

memo1.Text := IdHTTP1.Get(get_url+'v'); 
+0

我用另一种方式,我爱你....很多谢谢 – Wel 2015-02-11 21:50:30