2017-06-12 2 views
0

Ich benutze angular.js für kleine App. auf der Anmeldeseite nach Benutzer Benutzer füllen Sie die Daten und klicken Sie auf submit Taste eine Methode wird vom Controller aufgerufen, die API-Aufruf und dann Benutzer auf der nächsten Seite umleiten. Dies funktioniert in Chrome, Firefox und Microsoft Edge, funktioniert aber nicht in Internet Explorer.

Hier ist meine 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> 

Hier ist meine 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(); 
     } 
    ); 
}; 

Dieser Code in allen anderen Browser funktioniert gut, aber nicht nur im Internet Explorer (ich habe v11 Windows 10).

Ich habe Google viel zu diesem Thema, aber einige Antwort sagen, dass ersetzen ng-click="function_name()" zu direkten ng-click="$state.go()", aber das wird nicht in meinem Fall funktionieren.

Dank

+0

nicht erwähnt Fehler geworfen oder Versionen von Winkel- und verwendet Router. Stellen Sie eine Demo bereit, die das Problem reproduziert, wie in [mcve] – charlietfl

+0

m kein Fehler angezeigt wird –

+0

Verwenden Sie dann einen stateChange-Fehlerhandler für weitere Details. Auch nicht klar, ob Anfrage sogar erfolgreich ist – charlietfl

Antwort

0

Es könnte ein Problem mit dem IE-Caching AJAX-Anfragen sein. Versuchen Sie, das Caching mithilfe von HTTP-Antwortheadern vom Server zu deaktivieren, damit verhindert wird, dass der IE Ajax-Aufrufe zwischenspeichert.

+0

Siehe auch https://StackOverflow.com/Questions/16971831/Better-way-to-Prevent-ie-Cache-in-angularjs –

+0

Ich habe nicht verwendet AJAX Anruf –

+0

ich habe $ http sendPostRequest = function (url, Payload, onSuccess, onError) { data = { 'Payload' verwendet: JSON.stringify (Payload) }; $ http ({ Methode: 'POST', url: url, Daten: $ .param (Daten), withCredentials: true, Header: { 'Content-Type': ‚application/x-www- form-urlencoded‘ } }) .then (Funktion successCallback (response) { onSuccess (response); }, Funktion errorCallback (err) { onError (err); }); }; –

0

Sie können versuchen, und deaktivieren Sie global wie:

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

gleichen Ergebnis, funktioniert nicht –

Verwandte Themen