[英]$http in Anjgularjs: Can someone explain the flow
在$ http調用中,我們可以在url部分傳遞的所有內容,我有一個服務器地址,一個用戶名和密碼。 我可以將所有作為json對象傳遞嗎?或者我們還有其他任何參數(如url)。 有人可以幫助我理解成功通話中發生的事情。
具體來說,我正在努力的代碼是:
app.factory('myFactory',function(){
var fact = {};
fact.getData = function(a){
$http({method:'POST',url:'http://100.100.100.100:8080/xx/xx.xx'});
$http.success(function(reply){a(reply)}
);
};
return fact;
});
請參閱以下代碼,我仍然沒有從服務器獲取數據,同時也沒有錯誤。
xapp.factory('loginData',function($http,$log){
var fact = {};
fact.getData = function(cred,cb){
return
$http({
method:'post',
url:'xxx.xxx.xxx.xxx:xxxx/xxxxxx',
data:cred})
.success(function(data,status,header,config){
cb(data);
})
.error(function(data,status,header,config){
$log.warn(status);
});
};
return fact;
});
xapp.controller('mainController',function($scope,$log,$http,loginData){
$scope.user = {uesr:'user',password:'123'};
loginData.getData($scope.user,function(data){
$scope.reply = data;
});
});
在控制台日志中,我得到一個'未定義'。 如果http網址是正確的,你看到任何問題嗎?
據我了解, a
參數是收到來自服務器的回復時執行的回調函數。 這會破壞$q
服務提供的承諾的目的。 此外, $http
服務本身沒有.success
回調。 它返回一個帶有.success
和.error
回調的promise
對象。 這是應該怎么做的:
app.factory('myFactory', function() {
var fact = {};
fact.getData = function() {
return $http.get('your/path/to/resource/');
}
return fact;
})
.controller('myCtrl', function($scope, myFactory) {
myFactory.getData().then(function(response){
//response.data holds your data from server
}, function(){
//this fn gets called when error happens
});
});
一些解釋: myFactory.getData()
為服務器創建一個新的http請求,並返回一個promise對象,該對象有一個方法.then(successCallback, errorCallback)
。 您可以在請求完成后提供要執行的承諾的回調。
您可能會對我在您的示例中使用的.success(callback)
.then(successCallback, errorCallback)
和.success(callback)
感到困惑。 $q
提供的通用promise
有.then
方法,但是$http
服務在返回一個promise時提供了快捷方式.success()
和.error()
但最后卻是一樣的。
這將解決您發送身體的問題。
app.factory('myFactory', function($http) {
return{
getData : function(body) {
return $http({
url: 'http://100.100.100.100:8080/xx/xx.xx',
method: 'POST',
data:body
})
}
}
});
app.controller('myCtrl', function($scope, $location, $http, myFactory){
var body ={username:uname, password:pass};
myFactory.getData(body).success(function(data){
$scope.data=data;
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.