代码之家  ›  专栏  ›  技术社区  ›  Priyank

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

  •  3
  • Priyank  · 技术社区  · 8 年前

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

    在下面的代码中,当我们将查询字符串作为param传递时,它给出了一个错误的请求错误。

    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 回复  |  直到 8 年前
        1
  •  5
  •   Dhyey    8 年前

    您需要传递附加到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);
    });
    

    您现在可以检查dev控制台的网络选项卡,其中的URL和postman应该是相同的。

        2
  •  1
  •   Mohit Dixit    8 年前

    您需要检查作为post数据发布到调用的参数。 以下是示例。

        let postData = {};
                    postData.id = this.id;
                    postData.name = 'Test';
                    PostRequest(this.BaseUrl + 'api/admin/edit/question', postData).then(res => {
                        if (res) {
                        }
                   });
    

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

        3
  •  1
  •   Juan Angel    6 年前

    在另一个线程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
    }
    
    推荐文章