Javascript 未在IE11上调用$http.success回调
我有一个AngularJS应用程序,它使用$http服务加载一些数据,然后根据修改后的数据更新相应的html元素并更新UI。代码如下:Javascript 未在IE11上调用$http.success回调,javascript,angularjs,internet-explorer,Javascript,Angularjs,Internet Explorer,我有一个AngularJS应用程序,它使用$http服务加载一些数据,然后根据修改后的数据更新相应的html元素并更新UI。代码如下: app.controller("RankingCtrl", function ($scope, PostModel, DeserializePosts, $http, $cookies){ var mainContainer = $('#mainContainer'); $scope.error = null; function loa
app.controller("RankingCtrl", function ($scope, PostModel, DeserializePosts, $http, $cookies){
var mainContainer = $('#mainContainer');
$scope.error = null;
function loadTop(){
$http({
type: 'GET',
url: '/ranking',
headers: {
'X-Requested-With': 'XMLHTTPRequest',
}
}).success(function(topPosts){
var mostLikedPosts = DeserializePosts(topPosts.mostLiked);
var mostViewedPosts = DeserializePosts(topPosts.mostViewed);
var mostCommentedPosts = DeserializePosts(topPosts.mostCommented);
$scope.topLiked = mostLikedPosts;
$scope.topViewed = mostViewedPosts;
$scope.topCommented = mostCommentedPosts;
}).error(function(error){
errorHandler(error.statusCode, error);
}).finally(function () {
$('#mainContainerSpinner').hide();
mainContainer.fadeIn();
});
}
loadTop();
});
我的问题是,显然没有调用.success函数,因为执行了.finally函数,但UI没有使用任何下载的元素进行更新。如果我在IE浏览器窗口中按住ctrl-R键,则该功能正常工作,UI显示预期的元素。这个问题不会发生在Chrome或FireFox上
有趣的是,当我从IE打开F12开发工具来调试这个JS代码时,问题并没有发生。看起来更像是IE11上的一个bug,但我想知道是否有其他人见过这种行为,以及是否有解决方法可以尝试。目前,我的用户在访问页面时需要刷新页面,因为只有页面刷新才能按预期在这个AngularJS控制器上更新UI
更新:UI未得到更新,因为.success函数具有引发异常的
forEach
指令。之所以会发生这种情况,是因为浏览器发送$http请求,而不发送上面代码中指定的“X-request-With”头,因此它收到的响应是html而不是json。强制浏览器刷新会使浏览器将此头添加到http请求。您是否尝试使用$http config的缓存
选项?@yazaki,没有明确使用缓存。为什么?我应该考虑在那里添加一些更改吗?嗨,路易斯!从出现问题的情况判断(仅在IE打开时发生,而不是在IE开发工具打开时发生)。在我的经验中,浏览器缓存常常与这些问题有关。顺便说一句,我读了你的更新。为了解决您的问题,我理解$http不会仅在IE中设置标题“X-request-With”(而不是打开devtool)。我的理解正确吗?当我尝试类似的代码时,我的IE11(11.0.9600.17691)总是按预期发送头。以下是完全不同的一点,键入:“GET”
jsut是否拼写错误?我认为方法:“GET”
是正确的。