我怎样才能恢复使用数据的承诺
得到了错误successdata是不是在我的一个功能,我不知道我做错了。我想念控制器中的东西吗?我通过调试应用程序观察到响应正在投入使用,但没有任何回报
var module = angular.module('app', []);
module.service("webservice", function($http,$q) {
return {
callservice:function(method,url,_data){
var deferred = $q.defer();
var promise = deferred.promise;
$http({
method: method,
url: App_Service_api+url,
data: _data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).
success(function (data, status, headers, config) {
if (data.success) {
deferred.resolve(data.message);
//return deferred.promise;
promise.successdata = function(fn) {
promise.then(fn);
return deferred.promise;
}
}
else {
deferred.reject("Plase Enter valid data.");
//return deferred.promise;
promise.errordata = function(fn) {
alert("error");
promise.then(null, fn);
return deferred.promise;
}
}
}).
error(function(data, status, headers, config){
deferred.reject("Plase Enter valid data.");
//return deferred.promise;
promise.errordata = function(fn) {
promise.then(null, fn);
return deferred.promise;
}
});
}
}
})
这是我的控制器代码
webservice.callservice('POST',App_Service_login,inputs).successdata(function(data){
var alertPopup = $ionicPopup.alert({
title: 'Login Succesfull!',
template: 'Please check your credentials!'
});
})
.errordata(function(data) {
var alertPopup = $ionicPopup.alert({
title: 'Login failed!',
template: 'Please check your credentials!'
});
});
我重构了一下您的代码。真诚的我不明白为什么要创建函数successdata
和errordata
。您可以尝试以下更简单的方法:
服务:
module.service("webservice", function($http, $q) {
return {
callservice: function(method, url, _data){
var deferred = $q.defer();
$http({
method: method,
url: App_Service_api + url,
data: _data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).
success(function (data, status, headers, config) {
if (data.success) {
deferred.resolve(data.message);
}
else {
deferred.reject("Plase Enter valid data.");
}
}).
error(function(data, status, headers, config){
deferred.reject("Plase Enter valid data.");
});
return deferred.promise;
}
}
});
控制器:
webservice.callservice('POST', App_Service_login, inputs).then(function(dataMessage){
console.log('dataMessage', dataMessage);
var alertPopup = $ionicPopup.alert({
title: 'Login Succesfull!',
template: 'Please check your credentials!'
});
})
.catch(function(errorMessage) {
console.log('errorMessage', errorMessage);
var alertPopup = $ionicPopup.alert({
title: 'Login failed!',
template: 'Please check your credentials!'
});
});
更新:
service
应该通过在服务器端返回正确的http状态代码的一点修复来改进此代码。使用此更改,而不是data.success = false
在出现一些验证错误时返回属性,您应该返回Status 400 Bad Request
和data.message = 'Please Enter valid data'
。这样做您应该data.success
从响应中删除该属性,控制器将保持不变,并且您的服务将变为:
服务:
module.service("webservice", function($http, $q) {
return {
callservice: function(method, url, _data){
return $http({
method: method,
url: App_Service_api + url,
data: _data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
}
}
});
在200到299之间的响应状态代码被视为成功状态,并将导致调用成功回调。请注意,如果响应是重定向,则XMLHttpRequest将透明地跟随它,这意味着不会为此类响应调用错误回调。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句