我正在使用angular.js作为小应用程序。在用户用户填写数据并单击submit
按钮后的注册页面中,从控制器调用一个方法进行API调用,然后在下一页重定向用户。这在Chrome,Firefox和Microsoft Edge中运行良好,但它无法在Internet Explorer中运行。
这是我的signup.html
<form name="userRegForm"
ng-submit="userRegForm.$valid && registerUser()">
<md-input-container class="md-block">
<label>Full name</label>
<input required
ng-model="user.fullName"
name="fullName"
id="fullName"
autocomplete="off"
ng-pattern="/^[a-zA-Z ]*$/">
<div ng-messages="userRegForm.fullName.$error">
<div ng-message="required">Full name is required.</div>
<div ng-message="pattern">Please enter valid name</div>
</div>
</md-input-container>
<md-input-container class="md-block">
<label>Email</label>
<input required name="emailId" ng-model="user.emailId" type="email" autocomplete="off">
<div ng-messages="userRegForm.emailId.$error">
<div ng-message="required">Email is required.</div>
<div ng-message="email">Please enter valid Email.</div>
</div>
</md-input-container>
<md-input-container class="md-block">
<label>Password</label>
<input required name="password" ng-model="user.password" type="password" autocomplete="off">
<div ng-messages="userRegForm.password.$error">
<div ng-message="required">Password is required.</div>
</div>
</md-input-container>
<section id="non-padding" style="overflow: hidden">
<div class='layout layout--middle'>
<div class="layout__item xs-mb1 sm-text-right xs-text-right col-xs-4 sm-5of12 xs-6of12 sm-push7of12 sm-mb0 padding-right-0">
<input placeholder="REGISTER" type="submit" class="button button button--primary"
value="SIGN UP">
</div>
</div>
</section>
</form>
这是我的controller
$scope.registerUser = function () {
apiUrl = "http://example.com/save_data";
var userData = {
role: 'CANDIDATE',
fullName: $scope.user.fullName,
emailId: $scope.user.emailId.toLowerCase(),
password: $scope.user.password
};
webService.sendPostRequest(apiUrl, userData,
function (response) {
data = JSON.parse(response.data);
if (data.RESPONSE_CODE == 'SUCCESS') {
$state.go('restricted.candidate.editProfile', {pageId: ''}, {location: 'replace'});
} else if (data.RESPONSE_CODE == 'WARNING') {
alertService.setNotification('Email already exists.', 'warning');
alertService.showNotification();
} else {
alertService.setNotification('Something going wrong, Please try again.', 'failure');
alertService.showNotification();
}
},
function (err) {
alertService.setNotification('Something went wrong, Please try again.', 'failure');
alertService.showNotification();
}
);
};
此代码在所有其他浏览器中运行良好,但不仅适用于Internet Explorer(我有v11,Windows 10)。
我在这个问题上有很多谷歌,但有些回答是说将ng-click="function_name()"
替换为ng-click="$state.go()"
,但这不适用于我的情况。
由于
答案 0 :(得分:1)
您可以尝试全局禁用:
myModule.config(['$httpProvider', function($httpProvider) {
//initialize get if not there
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
// Answer edited to include suggestions from comments
// because previous version of code introduced browser-related errors
//disable IE ajax request caching
$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
// extra
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
}]);
答案 1 :(得分:0)
这可能是IE缓存ajax请求的问题。尝试使用来自服务器的HTTP响应标头禁用缓存,以防止IE缓存Ajax调用。
res.header("Cache-Control", "no-cache, no-store, must-revalidate");
res.header("Pragma", "no-cache");
res.header("Expires",0);