简体   繁体   中英

$state.go not working in Internet explorer

I am using angular.js for small app. in signup page after user user fill the data and click on submit button one method is called from controller that make API call and then redirect user on next page. this is working fine in Chrome, Firefox and Microsoft Edge but it's not working in Internet Explorer.

Here is my 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>

Here is my 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();
        }
    );
};

This code is working fine in all other browser but not only in Internet explorer (i have v11, Windows 10).

i have google a lot on this issue but some answer are saying that replace ng-click="function_name()" to direct ng-click="$state.go()" but this won't work in my case.

Thanks

You can try and disable globally like:

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';
}]);

It could be a issue with IE caching ajax requests. Try disabling caching using HTTP response headers from the server so that it will prevent IE from caching Ajax calls.

res.header("Cache-Control", "no-cache, no-store, must-revalidate");
res.header("Pragma", "no-cache");
res.header("Expires",0);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM