【问题标题】:Ionic2 http post performs http getIonic2 http post 执行 http get
【发布时间】:2017-03-24 18:15:41
【问题描述】:

我正在尝试使用如下所示的 angular http post 方法发布数据。但是,每当我执行此操作时,它都会执行 get 方法。任何意见或建议将不胜感激。

login() {
    let headers = new Headers();
    headers.append('Content-Type','application/x-www-form-urlencoded');
    let options = new RequestOptions({ headers: headers });
    let data = {
        "id" : this.phoneNumber,
        "uuid": '1234123412341234'
    }
    const body = new URLSearchParams();
    Object.keys(data).forEach(key => {
        body.set(key, data[key]);
    })

    let token = 'a%2FxMRIEsjokCR6vBkmpjh2UBeRKlVxLEiXundnAoqz0%3D';
    var url = '/api/auth/login?origin=driver&access-token='+token;
    this.http.post(url, body.toString(), options).subscribe( data =>{
        console.log(data);
    })
}

我用角度 1 编写了类似下面的代码。

$scope.login = function(){
    var link = proxy_link+'api/auth/login';

    $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";

    $http({
        method: 'POST',
        url: link,
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        transformRequest: function(obj) {
            var str = [];
            for(var p in obj)
            str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
            return str.join("&");
        },
        params: {
            'device': 'android',
        },
        data: {
            id:$scope.data.id,
            pw:$scope.data.pw,
            device_token: localStorage.myPush,
            uuid : localStorage.uuid,
            imei: localStorage.imei
        }
    }).success(function(data){
        // do something
    }).error(function(data){
       // handle error
    });

};

【问题讨论】:

  • 尝试直接设置RequestOptions而不是headers..let options = new RequestOptions({ headers: headers }); this.http.post(url,body,options)
  • @suraj 仍然没有运气:(
  • 您正在发送get参数,将内容类型设置为urlencoded形式,然后发送json数据..Content-Type:application/json
  • 我不认为toString() 是必要的.. 但应该工作
  • @suraj 它不能正常工作:(

标签: angular ionic2


【解决方案1】:

查看您的 Angular 1 代码,您需要在 POST 表单数据中发送所有参数,而不是在 url 中。

试试:

login() {
    let headers = new Headers();
    headers.append('Content-Type','application/x-www-form-urlencoded');
    let options = new RequestOptions({ headers: headers });
    let token = 'a%2FxMRIEsjokCR6vBkmpjh2UBeRKlVxLEiXundnAoqz0%3D';
    //set it here
    let data = {
        "id" : this.phoneNumber,
        "uuid": '1234123412341234',
        "origin":driver,
        "access_token":token
    }
    const body = new URLSearchParams();
    Object.keys(data).forEach(key => {
        body.set(key, data[key]);
    })

    var url = '/api/auth/login';
    this.http.post(url, body, options).subscribe( data =>{
        console.log(data);
    })
}

【讨论】:

  • 感谢您的回复。我发现了问题。问题是我使用的是 http:// 而不是 https://。从address 重定向到address 不知何故扭曲了方法。
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
相关资源
最近更新 更多