2017-06-12 129 views
0

我正在为小应用程序使用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

使用引发的错误或角和路由器版本没有提到。根据[mcve] – charlietfl

+0

m没有收到任何错误提供演示文稿,重现问题 –

+0

然后使用stateChange错误处理程序获取更多详细信息。也不清楚请求是否成功 – charlietfl

回答

0

这可能是IE缓存ajax请求的问题。尝试使用来自服务器的HTTP响应头禁用缓存,以防止IE缓存Ajax调用。

+0

也见https://stackoverflow.com/questions/16971831/better-way-to-prevent-ie-cache-in-angularjs –

+0

我还没有使用ajax调用 –

+0

我已经使用$ HTTP sendPostRequest =函数(URL,有效负载的onSuccess,onError的){ 数据= { 'PAYLOAD':JSON.stringify(有效载荷) }; $ HTTP({ 方法: 'POST', 网址:网址, 数据:$ .PARAM(数据), withCredentials:真, 标头:{ '内容 - 类型':“应用程序/ x-WWW-窗体-urlencoded” } }) 。然后(功能successCallback(响应){ 的onSuccess(响应); },功能errorCallback(ERR){ 的onError(ERR); }); }; –

0

你可以试着和全球禁用,如:

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

之类的东西全局禁用,结果相同,不起作用 –

相关问题