Http Post param in url angular 2

时间:2017-08-25 08:31:19

标签: angular http url post parameters

所以,我在Javascript中有下一个代码,其中值在URL中发送

//params = 5
function httpPostAsync(url, params){
    // test: curl -X POST http://url/brightness/5
    var http = new XMLHttpRequest();
    http.open("POST", "/brightness/"+ params , true);

    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.onreadystatechange = function() {
        if(http.readyState == 4 && http.status == 200) {
            //Popup good for debugging
        }
    }
    http.send(null);
}

我的问题是,我怎么能在Angular中做到这一点? 我有下一个代码,但它不会在URL

中发送值'5'

//服务

  postValue(data) {
    let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
    let options = new RequestOptions({ headers: headers });
    let params = new URLSearchParams();
    params.append('value', data);
    return this.http.post(url, params.toString(), options)
      .timeoutWith(2000);
  }

//元器件

let value = 5;
this._localserverService.postValue(value).subscribe();

我知道当我使用form-urlencoded内容类型发送数据时,我应该使用key = value对以查询字符串格式发送数据。但是我的旧代码中不需要这样做。

我也知道http.post的第二个参数是消息的主体(有效负载),而不是URL搜索参数。

我应该做些什么不同?

谢谢!

1 个答案:

答案 0 :(得分:0)

在这种情况下,您只需将data附加到您的网址:

postValue(data) {
    // You might not even need to set the header, as you body is anyway empty...
    let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
    let options = new RequestOptions({ headers: headers });

    return this.http.post(`url/${data}`, null, options)
      .timeoutWith(2000);
  }

URLSearchParams用于查询字符串参数(类似http://url/brightness?value=5),但如果您希望5作为网址的一部分(http://url/brightness/5),上面的代码应该这样做。