我正在使用以下代码,我希望首先推送标头,然后是请求。使用JQuery,我只需添加beforeSend,工作正常。但我已经改为AngularJS(我很喜欢......)我对拦截器感到困惑!
令我困惑的是,如果我想首先发送标题,我在哪里告诉它,在哪里发送标题。看一下这个并不多的例子,在发送之前也是如此,我要么不理解,要么没有看到任何适合我的问题。
代码:
App.factory('postCemment', function($q,requestInterceptor, $http) {
return {
fnsend: function(sid, author, comment, callback) {
$http.Provider.interceptors.push(requestInterceptor);
$http.post("https://api.appery.io/rest/1/db/collections/comments/",
{
headers: {"Content-Type": 'application/x-www-form-urlencoded'},
params: {comment_author : author, comment : comment, statement_id : sid}
})
.success(function(commentres) {
callback(commentres);
})
}
}
})
App.factory('requestInterceptor', function() {
return {
'request': function(config) {
config.headers = {"X-Appery-Database-Id": dbid}
console.log(config);
return config;
}
}
})
App.controller('addCommentBox', function($scope, $http, $routeParams, postCemment) {
$scope.addCommentData = function() {
postCemment.fnsend($routeParams.id,$scope.aurhor,$scope.comment, function(res) {
console.log(res);
})
}
})
如果我尝试没有任何类型的拦截器,我只会收到一个错误,即未指定数据库,即使我可以在浏览器开发屏幕的标题中看到它。
我之前使用过$ q并且推迟了,我确实读过这可能是必需的,因为有些例子没有使用它,但这就是混乱的地方。即使推迟,我还能推迟什么时候?
提前致谢。
安德鲁