我一直在努力解决这个问题现在一会儿。我一直在做一个离子+解析登录,注册,忘记密码的应用程序。这就是说Ionic是数据库的前端和parse.com。XMLHttpRequest失败:{statusText“:Not Found”,“status :: 404,”responseURL“:https://api.parse.com/1/users”Ionic + Parse
当从命令行使用Ionic服务器时,该功能可以在本地主机上完美工作,但是当我为android(离子建模android)或仿真(离散仿真android)构建应用程序或在android上测试它时设备我收到一系列错误消息:
当我尝试登录时;出现意外错误请重试
当我尝试重置密码时;发生意外错误,请重试
当我尝试,我出此错误信息进行注册:
XMLHttpRequest的失败:{状态文本“:未找到”,“状态:: 404” responseURL“:https://api.parse.com/1/users “,”response“:”“resp onseType”:“”。responseXML“:null,”responseText“:”“,”upload“:{loadend”:null,“onload”:null,“onprogress” “onloadstart”:NULL, “onloadend”:空,:的onload “:空” 的onerror “:空” onabort “:NULL}” withCredentials “:假” 的readyState “:4” 超时 “:0,” ontimeout” :空, “onprogress”:空, “onloadstart”:空,:onloadend “:空” 的onload “:空” 的onerror “:空,:onabort”:空}
这里是我的代码:
注册页面:模板文件夹
<ion-view title="Register">
<ion-content has-header="true" has-tabs="true" padding="true">
<div class="list">
<label class="item item-input">
<input type="email" ng-model="user.email" placeholder="Email">
</label>
<label class="item item-input">
<input type="password" ng-model="user.password" placeholder="Password">
</label>
<label class="item item-input">
<input type="text" ng-model="user.name" placeholder="First Name">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Date of Birth</span>
<input type="date" ng-model="user.dob">
</label>
</div>
<div class="assertive" ng-show="error.message">{{error.message}}</div>
<button class="button button-block button-stable" ng-click="register()">
CREATE ACCOUNT
</button>
By creating an account you agree to the Terms of Use and Privacy Policy.
</ion-content>
</ion-view>
controllers.js
angular.module('ionicParseApp.controllers', [])
.controller('AppController', function($scope, $state, $rootScope, $ionicHistory, $stateParams) {
if ($stateParams.clear) {
$ionicHistory.clearHistory();
$ionicHistory.clearCache();
}
$scope.logout = function() {
Parse.User.logOut();
$rootScope.user = null;
$rootScope.isLoggedIn = false;
$state.go('welcome', {
clear: true
});
};
})
.controller('WelcomeController', function($scope, $state, $rootScope, $ionicHistory, $stateParams) {
if ($stateParams.clear) {
$ionicHistory.clearHistory();
$ionicHistory.clearCache();
}
$scope.login = function() {
$state.go('app.login');
};
$scope.signUp = function() {
$state.go('app.register');
};
if ($rootScope.isLoggedIn) {
$state.go('app.home');
}
})
.controller('HomeController', function($scope, $state, $rootScope) {
if (!$rootScope.isLoggedIn) {
$state.go('welcome');
}
})
.controller('LoginController', function($scope, $state, $rootScope, $ionicLoading) {
$scope.user = {
username: null,
password: null
};
$scope.error = {};
$scope.login = function() {
$scope.loading = $ionicLoading.show({
content: 'Logging in',
animation: 'fade-in',
showBackdrop: true,
maxWidth: 200,
showDelay: 0
});
var user = $scope.user;
Parse.User.logIn(('' + user.username).toLowerCase(), user.password, {
success: function(user) {
$ionicLoading.hide();
$rootScope.user = user;
$rootScope.isLoggedIn = true;
$state.go('app.home', {
clear: true
});
},
error: function(user, err) {
$ionicLoading.hide();
// The login failed. Check error to see why.
if (err.code === 101) {
$scope.error.message = 'Invalid login credentials';
} else {
$scope.error.message = 'An unexpected error has ' +
'occurred, please try again.';
}
$scope.$apply();
}
});
};
$scope.forgot = function() {
$state.go('app.forgot');
};
})
.controller('ForgotPasswordController', function($scope, $state, $ionicLoading) {
$scope.user = {};
$scope.error = {};
$scope.state = {
success: false
};
$scope.reset = function() {
$scope.loading = $ionicLoading.show({
content: 'Sending',
animation: 'fade-in',
showBackdrop: true,
maxWidth: 200,
showDelay: 0
});
Parse.User.requestPasswordReset($scope.user.email, {
success: function() {
// TODO: show success
$ionicLoading.hide();
$scope.state.success = true;
$scope.$apply();
},
error: function(err) {
$ionicLoading.hide();
if (err.code === 125) {
$scope.error.message = 'Email address does not exist';
} else {
$scope.error.message = 'An unknown error has occurred, ' +
'please try again';
}
$scope.$apply();
}
});
};
$scope.login = function() {
$state.go('app.login');
};
})
.controller('RegisterController', function($scope, $state, $ionicLoading, $rootScope) {
$scope.user = {};
$scope.error = {};
$scope.register = function() {
// TODO: add age verification step
$scope.loading = $ionicLoading.show({
content: 'Sending',
animation: 'fade-in',
showBackdrop: true,
maxWidth: 200,
showDelay: 0
});
var user = new Parse.User();
user.set("username", $scope.user.email);
user.set("password", $scope.user.password);
user.set("email", $scope.user.email);
user.signUp(null, {
success: function(user) {
$ionicLoading.hide();
$rootScope.user = user;
$rootScope.isLoggedIn = true;
$state.go('app.home', {
clear: true
});
},
error: function(user, error) {
$ionicLoading.hide();
if (error.code === 125) {
$scope.error.message = 'Please specify a valid email ' +
'address';
} else if (error.code === 202) {
$scope.error.message = 'The email address is already ' +
'registered';
} else {
$scope.error.message = error.message;
}
$scope.$apply();
}
});
};
})
.controller('MainController', function($scope, $state, $rootScope, $stateParams, $ionicHistory) {
if ($stateParams.clear) {
$ionicHistory.clearHistory();
}
$scope.rightButtons = [{
type: 'button-positive',
content: '<i class="icon ion-navicon"></i>',
tap: function(e) {
$scope.sideMenuController.toggleRight();
}
}];
$scope.logout = function() {
Parse.User.logOut();
$rootScope.user = null;
$rootScope.isLoggedIn = false;
$state.go('welcome', {
clear: true
});
};
$scope.toggleMenu = function() {
$scope.sideMenuController.toggleRight();
};
});
apps.js
// setup an abstract state for the tabs directive
.state('welcome', {
url: '/welcome?clear',
templateUrl: 'templates/welcome.html',
controller: 'WelcomeController'
})
.state('app', {
url: '/app?clear',
abstract: true,
templateUrl: 'templates/menu.html',
controller: 'AppController'
})
.state('app.home', {
url: '/home',
views: {
'menuContent': {
templateUrl: 'templates/home.html',
controller: 'HomeController'
}
}
})
.state('app.login', {
url: '/login',
views: {
'menuContent': {
templateUrl: 'templates/login.html',
controller: 'LoginController'
}
}
})
.state('app.forgot', {
url: '/forgot',
views: {
'menuContent': {
templateUrl: 'templates/forgotPassword.html',
controller: 'ForgotPasswordController'
}
}
})
.state('app.register', {
url: '/register',
views: {
'menuContent': {
templateUrl: 'templates/register.html',
controller: 'RegisterController'
}
}
});
$urlRouterProvider.otherwise('/welcome');
})
.run(function ($state, $rootScope) {
Parse.initialize('**hidden**', '**hidden**');
var currentUser = Parse.User.current();
$rootScope.user = null;
$rootScope.isLoggedIn = false;
if (currentUser) {
$rootScope.user = currentUser;
$rootScope.isLoggedIn = true;
$state.go('app.home');
}
});
我从来没有在离子应用中使用白名单插件使用解析,这可能工作......但我不确定它是必需的。 –
谢谢,它工作!最后我能够与外界沟通。 – user2993476
@ user2993476:您应该接受答案,而不是用“谢谢”回答自己的问题。干杯。 – LeftyX