0

我正在使用带有 TypeScript 版本 2.2.2 的 Angular4

当我使用过滤器调用 JSON 时,我的 Web 应用程序运行良好,但是当我将过滤器值作为对象调用时,我的 NativeScript 应用程序失败,但当我将过滤器值作为字符串调用时,它运行良好。

错误响应状态为:200 对于 URL:null

这工作 https://domainname.com/api/v1/searchevents?token=057001a78b8a7e5f38aaf8a682c05c414de4eb20&filter=text&search=upcoming

如果过滤器值和搜索值是 STRING 它可以工作,而如果它们是如下的对象,它就不起作用

这不起作用

https://api.domainname.com/api/v1/searchevents?token=057001a78b8a7e5f38aaf8a682c05c414de4eb20&filter= {"limit":"12","skip":"0"}&search={"search":"","latitude" :"","longitude":"","categories":"","address":"","type":"upcoming"}

我使用的代码如下

getData(serverUrl,类型,skip_limit){

    console.log(serverUrl);
    let headers = this.createRequestHeader();
    let token_value = localStorage.getItem('access_token')

    let url;
    var filter;

    filter = '{"limit":"10","skip":"0"}'



    url = this.apiUrl + serverUrl + '?token=' + token_value + '&filter=' + filter

    return this.http.get(url, { headers: headers })
        .map(res => res.json());
}

上面为 API 形成的 URL 很好,并且工作正常。然而错误来自错误响应,状态为:200 for URL:null

谁能帮我解决这个问题?

4

2 回答 2

0

看起来问题是“过滤器”值的类型不同,并且从您提到的有效内容来看,您的服务需要一个字符串而不是对象/数组。因此,当它收到一个响应时,它无法发送正确的响应。使用 URL 中的对象,您可能必须重写服务以将其读取为对象(解析两个属性并分别获取它们)

为简单起见,您可以将这两者作为 URL 中的两个不同变量。如下所示,

https://api.domainName.in/api/v1/oauth/token?limit=10&skip=0

更准确地了解您的问题中发生的事情,

1) 记录确切的 URL 并将其发布在问题中。没有人能猜出您的第一个 URL 中“文本”中的内容。

2)您提到的有效 URL 将“token”作为路径的一部分,但在代码中,它是一个变量,它将具有来自“token_value”的动态值。

3) 发布您的服务代码。尤其是签名和输入解析部分。

于 2018-01-18T04:06:06.403 回答
0

得到了解决方案:您所要做的就是使用 Typescript encodeURI() 对过滤器和搜索参数进行编码(如果它是对象或数组)

var filter = '{"limit":"12","skip":"0"}'

var search = '{"search":"","latitude":"","longitude":"","categories":"","address":"","type":"upcoming"}'

var encoded_filter = encodeURI(filter);

var encode_search = encodeURI(搜索);

url = this.apiUrl+serverUrl+'?token='+token_value+'&filter='+encoded_filter+'&search='+encoded_search

于 2018-01-18T10:52:51.533 回答