如何将url参数(查询字符串)传递给离子3上的HTTP POST请求

时间:2018-01-09 06:32:29

标签: angular ionic2 http-post ionic3

我不知道如何使用查询字符串调用post服务。当我们使用发布方法运行在url下方时:https://test.data.com/myAPI/Login/authenticateUser?username=temp&password=Temp@123&regid=''&versions=1&deviceType=1在postman中它的工作完全正常,但不知道如何在离子3代码中传递查询字符串

在下面的代码中,当我们将查询字符串作为参数传递时,它会产生错误的请求错误。

return this.http.post("https://test.data.com/myAPI/Login/authenticateUser", params).subscribe((data: any) => {
  // let resp = data;
  // this.items = JSON.parse(JSON.parse(resp).Data);
  console.log('my data: ', data);
}, err => {
  console.log(err);
});

enter image description here

3 个答案:

答案 0 :(得分:3)

不需要传递对象,而是需要传递附加到url的字符串,如下所示:

let urlSearchParams = new URLSearchParams();
urlSearchParams.append('username', 'temp');
urlSearchParams.append('password', "Temp@123");
urlSearchParams.append('regid', "");
urlSearchParams.append('versions', "1");
urlSearchParams.append('deviceType', "1");

return this.http.post("https://test.data.com/myAPI/Login/authenticateUser?' + urlSearchParams.toString(), null).subscribe((data: any) => {
    // let resp = data;
    // this.items = JSON.parse(JSON.parse(resp).Data);
    console.log('my data: ', data);
}, err => {
    console.log(err);
});

您现在可以查看开发控制台的网络标签页,其中的网址和邮递员应该是相同的。

答案 1 :(得分:0)

在另一个线程ES6中发现了这一点,并且非常适合嵌套对象:

objectToQueryParams(params, keys = [], isArray = false) {
    const p = Object.keys(params).map(key => {
        let val = params[key]

        if ("[object Object]" === Object.prototype.toString.call(val) || Array.isArray(val)) {
            if (Array.isArray(params)) {
                keys.push("")
            } else {
                keys.push(key)
            }
            return this.objectToQueryParams(val, keys, Array.isArray(val))
        } else {
            let tKey = key

            if (keys.length > 0) {
                const tKeys = isArray ? keys : [...keys, key]
                tKey = tKeys.reduce((str, k) => {
                    return "" === str ? k : `${str}[${k}]`
                }, "")
            }
            if (isArray) {
                return `${ tKey }[]=${ encodeURIComponent(val) }`
            } else {
                return `${ tKey }=${ encodeURIComponent(val) }`
            }

        }
    }).join('&')

    keys.pop()
    return p
}

答案 2 :(得分:-1)

您需要检查您作为发布数据发布到电话中的参数。 以下是示例。

ofy().save().entity(thing1);
ofy().save().entity(thing2);
ofy().save().entity(thing3);

请确认您发送的参数的名称。 此外,需要检查您是否正在向请求发送正确的令牌值???