WP API的POST请求给我400错误(错误请求) - Ionic

时间:2016-05-26 03:16:13

标签: angularjs wordpress ionic-framework

好的,所以我正在使用Wordpress作为我的后端的Ionic应用程序。与WP API插件一起,我能够创建一个基本身份验证(需要发布到Wordpress DB)。

我的最后一个情况是这个 - > Basic authentication not working for WP API with Ionic/Angular

现在我收到400错误(错误请求),但是当我在Postman中使用键和值(内容,标题和摘录)运行我的端点时,它会被保存到WP DB。

enter image description here

我现在面临的问题是如何让它运行应用程序。所以基本上应用程序的视图只是一个文本区域,用户可以在其中提交问题。

对于内容,标题和摘录,我将所有值设置为1范围。

我的部分HMTL代码:

<!-- <input type="text" placeholder="State your base" ng-model="question">
<input type="text" placeholder="excerpt" ng-model="question"> -->
<textarea class="customTextarea" name="question" id="" cols="30" rows="30" 
placeholder="Add Question Here" ng-model="question"></textarea>
<button ng-click="save()">Submit</button>

我的控制器代码的一部分:

.controller('AddQuestionCtrl', function($scope, $http, $base64){
        $scope.save = function(){
        console.log('SAVE');
        var url = 'XXXX/wp-json/wp/v2/posts';
        var username = 'xxxx';
        var psw = 'xxxx';

        $http.post(url, {content: $scope.question, title: $scope.question, excerpt: $scope.question},{
            headers:{
                'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8',
                'Authorization' : 'Basic ' + $base64.encode(username + ':' + psw),
                'Access-Control-Allow-Origin': '*' 
            }
        }).then(function(response){
            $scope.result = response;
            console.log('The data has been saved to DB', $scope.result);
        },
            function (error) {
            $scope.test = error;
            console.log('error response', $scope.test);         
        });
    }
})

2 个答案:

答案 0 :(得分:2)

首先将数据转换为object然后传递给http.post。它正在运作

myobject = {'content': $scope.question, 'title': $scope.question, 'excerpt': $scope.question};

Object.toparams = function ObjecttoParams(obj)
{
    var p =[];
    for (var key in obj)
    {
        p.push(key + '=' + encodeURIComponent(obj[key]));
    }
    return p.join('&');
};

$http({
    url: 'YOUR-WP-API-GOES-HERE',
    method: "POST",
    data: Object.toparams(myobject),
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
.success(function (data, status, headers, config) 
{

})
.error(function (data, status, headers, config) 
{

});

答案 1 :(得分:1)

使用AngularJS,您可以更轻松地完成。

您可以注入$httpParamSerializer,然后通过$httpParamSerializer(data)准备您的数据。

所以你的电话应该是这样的:

$http({
    url: 'YOUR-WP-API-GOES-HERE',
    method: "POST",
    data: $httpParamSerializer(myobject),
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})