Angular 2 : Retrieving Data with http get request from server using query string

标签 angular http get request

您好,我正在尝试使用 http get 请求和查询字符串获取数据。

我希望获取的 http url 是 'baseUrl' + 'querystring' 之类的 http://randomUrl.com/?var1=val1&var2=val2

我尝试像下面那样使用 URLSearchParams 但不知何故,而不是获取 'var1=val1&var2=val2' 作为查询字符串, 我正进入(状态 http://randomUrl.com/?[object%20Object]

下面是我的代码。我做错了什么?

在全局的HttpClientService中,

get(path: string): Observable<any> {
    const headers = new Headers({ 'Content-Type': 'application/json' });
    headers.append('Access-Control-Allow-Headers', 'Content-Type');
    headers.append('Access-Control-Allow-Methods', 'GET');
    headers.append('Access-Control-Allow-Origin', '*');
    headers.append("X-Requested-With", "XMLHttpRequest");
    let options = new RequestOptions({ headers: headers });

    return this.http.get(`${baseURL.baseurl}${path}`, options)
        .map(this.extractdata)
        .catch(this.handleError);
}

在服务中, @Injectable() 导出类 GetDataService {

  constructor(private http: HttpClient) { }

  getData(queryparams): Observable<any> {

    return this.http.get('/front/search?' + `${queryparams}`)
 }
}

在使用上述服务的组件中,

获取数据():无效{

    let params = new URLSearchParams();
    params.set('var1', 'val1')
    params.set('var2', 'val2')
    params.set('var3', 'val3')

    this.getdata.getData({search:params})
        .subscribe
        (
        data => this.data = data,
        error => this.errorMessage = error
        )
}
ngOnInit(): void {
    this.getData();
}

我提前感谢你的帮助

最佳答案

URLSearchParams 实际上会将字符串格式化为您想要的 url,这意味着,它将查询字符串创建为正确的格式,所以就像您想要的那样:

var1=val1&var2=val2&var3=val3

所以你真的不需要对它做任何其他事情,只需将它传递到你的 url 中。所以请尝试以下操作:

getData(): void {
  let params = new URLSearchParams();
  params.set('var1', 'val1')
  params.set('var2', 'val2')
  params.set('var3', 'val3')

this.getdata.getData(params) // just pass the params as such
    .subscribe(
    data => this.data = data,
    error => this.errorMessage = error
    )
}

然后是您的服务:

get(path: string): Observable<any> {
    const headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    return this.http.get(baseUrl, path, options) // notice, pass the baseUrl as string and then just pass the queryparams as such
        .map(this.extractdata)
        .catch(this.handleError);
}

你得到 [object%20Object] 的原因是因为这一行:

this.getdata.getData({search:params})

这里你传递了一个对象 - 你创建了一个对象,它具有 search 属性,它包含你的查询字符串,这当然是你不想要的,因此只需传递你创建的查询字符串。

关于 Angular 2 : Retrieving Data with http get request from server using query string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43061006/

相关文章:

angular - 如何检查 Angular2 表达式中的 isNaN?

http - 用户存在时服务器返回 400

c - 如何用 curl 做 keepalive http 请求?

java - 如何使用 jhipster 生成带有 json 的 Rest get 服务?

angular - 如何为 In Angular 4 中的文本字段设置默认值?

jquery - 在 Angular js 中使用指令或 JQuery 的更好方法

ASP.NET 5 + Angular 2 路由(模板页面不重新加载)

ruby - 使用 Mechanize 记录 GET 请求 URL

jquery - 如何访问 GET AJAX 请求的 URL?

java - 利用 servlet 中的值在普通类中使用它