我不知道如何使用查询字符串调用post服务。当我们使用发布方法运行在url下方时:https://test.data.com/myAPI/Login/authenticateUser?username=temp&password=Temp@123®id=''&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);
});
答案 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);
请确认您发送的参数的名称。 此外,需要检查您是否正在向请求发送正确的令牌值???