如何在重新加载页面后从服务器捕获响应? Angular 2

时间:2017-08-06 14:06:34

标签: angular typescript payment

我有一个页面,其中包含付款系统所需的字段。提交此表单,我致电服务部门向该系统发送请求。结果,我被重定向到支付系统页面,我可以在那里付款。付款完成后,我会再次重定向到我的页面,请求从中发送。 问题是我无法从我的组件中的支付服务器捕获响应,尽管事实上我可以在开发工具的网络选项卡中看到该响应。

服务中的方法

>>> text = 'this is sample\ntext\n'
>>> print text
this is sample
text

>>> pattern = 'sample$'
>>> mo = re.search(pattern, text)
>>> mo.group()

Traceback (most recent call last):
  File "<pyshell#348>", line 1, in <module>
    mo.group()
AttributeError: 'NoneType' object has no attribute 'group'

>>> mo = re.search(pattern, text, re.MULTILINE)
>>> mo.group()
'sample'

这就是我在组件中调用服务的方式

sendXMLToFondy(request: RequestFondyViewModel): Observable<any> {
    let body = ` 
                    <?xml version="1.0" encoding="UTF-8"?>
                    <request>
                      <response_url>${request.response_url}</response_url>
                      <server_callback_url> ${request.server_callback_url}</server_callback_url>
                      <order_id> ${request.order_id}</order_id>
                      <order_desc> ${request.order_desc}</order_desc>
                      <currency>${request.currency}</currency>
                      <amount>${request.amount}</amount>
                      <signature>${request.signature}</signature>
                      <merchant_id>${request.merchant_id}</merchant_id>
                    </request>        
                `;
    return this._http.post("https://api.fondy.eu/api/checkout/url/", body)           
        .map((response: Response) => {               
            let res = response.text();
            return res;
        });
}

我在.map(在服务中)和.subscribe(在组件中)中放置的运算符不会被执行。

1 个答案:

答案 0 :(得分:0)

在我的申请中,我也面临同样的问题。我通过在我的服务中实现回调函数解决了这个问题,如:

public paymentGateway(request: Customer, callback) {
     this.http.post(url, request).map(res => res.json()).subscribe((res) => {
        return callback(res);
     });
}

在组件中代码如下:

public onPaymentGateway(request: Customer) {
    this.service.paymentGateway(request, (res) => {
        console.log(res);
    });
}