1

Пробный код here & here. Поскольку Plunker не поддерживает IE8 или IE9 очень хорошо, код примера можно запустить, открыв пример Plunker в современном веб-браузере, а затем запустив панель «Запуск» в отдельном окне и открыв этот URL в IE8 или IE9.AngularJS 1.2.7 Ошибка ресурса IE8

При выполнении вызова с использованием RESTful $ resource.query или $ resource.get, обещание не возвращает никаких результатов на IE8 или IE9, если настраиваемое действие определяется и используется:

factory('ResourceService2', ['$resource', '$q', function($resource, $q) { 
    var factory = { 
     query: function() { 
      var deferred = $q.defer(); 

      $resource('data.json', {'cacheSlayer' : new Date().getTime()}, { 
       'query': { 
        method: 'GET', 
        responseType: 'json', 
        isArray: true 
      }}).query(function (data) { 
       deferred.resolve(data); 
      }); 

      return deferred.promise; 
     } 
    }; 
    return factory; 
}]). 

запрос() :

ResourceService2.query().then(function (response) { 
    $scope.resource2Rows = response; 
}); 

Однако этот же вызов успешно возвращает результаты, когда пользовательское действие не определен или использованы:

factory('ResourceService', ['$resource', '$q', function($resource, $q) { 
    var factory = { 
     query: function() { 
      var deferred = $q.defer(); 

      $resource('data.json', { 
       'cacheSlayer' : new Date().getTime() 
      }, {}).query(function (data) { 
       deferred.resolve(data); 
      }); 

      return deferred.promise; 
     } 
    }; 
    return factory; 
}]). 

запрос():

ResourceService.query().then(function (response) { 
    $scope.resourceRows = response; 
}); 

Использование $ HTTP также успешно:

factory('HttpService', ['$http', '$q', function($http, $q) { 
    var factory = { 
     query: function() { 
      var deferred = $q.defer(); 

      $http.get('data.json', { 
       params: { 
        'cacheSlayer' : new Date().getTime() 
      }}).success(function (data) { 
       deferred.resolve(data); 
      }); 

      return deferred.promise; 
     } 
    }; 
    return factory; 
}]). 

прибудет():

HttpService.query().then(function (response) { 
    $scope.httpRows = response; 
}); 

Является ли это ошибка в IE8/IE9? Какие дополнительные параметры для пользовательского действия должны быть определены для совместимости с IE8/IE9? Руководство Angular Developer's Guide не упоминает об этой проблеме с 1.2.7.

+0

Спасибо за указание мне в правильном направлении, о том, как проверить plunks с помощью IE9! –

ответ

0

CORS не полностью реализован в ie8/9, так что это, скорее всего, ваша проблема. Вот статья MSDN об этом:

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

+1

Запрос такой же происхождения. Фактически, образец Plunker с настраиваемым действием отлично работает с использованием AngularJS v1.0.8, просто заменяя номера версий в тегах

Смежные вопросы