AngularJS HTTP.get not fired/显示在网络选项卡中
使用AngularJS多次触发http GET请求时,会调用回调,并且会有响应,但我的浏览器的“网络”选项卡上没有显示请求,并且响应的内容错误(以前触发的请求的内容)。我假设这是AngularJS/浏览器缓存问题,因为当它缓存在后端时,请求就会显示出来。我尝试了几种方法,比如禁用缓存,但没有任何帮助。http请求的承诺是从工厂返回的,这与此有关吗AngularJS HTTP.get not fired/显示在网络选项卡中,angularjs,get,Angularjs,Get,使用AngularJS多次触发http GET请求时,会调用回调,并且会有响应,但我的浏览器的“网络”选项卡上没有显示请求,并且响应的内容错误(以前触发的请求的内容)。我假设这是AngularJS/浏览器缓存问题,因为当它缓存在后端时,请求就会显示出来。我尝试了几种方法,比如禁用缓存,但没有任何帮助。http请求的承诺是从工厂返回的,这与此有关吗 angular.module('eventLogServiceApp', []) .factory('eventlog.service', [
angular.module('eventLogServiceApp', [])
.factory('eventlog.service', ['$http', createEventLogService]);
function createEventLogService($http) {
return {
getNotable: $http.get('https://myurl.com/api/endpoint')
}
}
angular.module('myApp')
.controller("AdminEventLogController", ['$scope', 'TranslationService', 'eventlog.service', function ($scope, trans, EventLog) {
$scope.getNotable = function() {
EventLog.getNotable.then(function success(response) {
$scope.notable = response.data.length;
}, function error() {
});
};
}])
我发现如果我将承诺包装在函数中,请求将显示在网络选项卡中。我不知道为什么会这样,但确实如此。示例如下所示:
angular.module('eventLogServiceApp', [])
.factory('eventlog.service', ['$http', createEventLogService]);
function createEventLogService($http) {
return {
getNotable: function(){
return $http.get('https://myurl.com/api/endpoint')
}
}
}
angular.module('myApp')
.controller("AdminEventLogController", ['$scope', 'TranslationService', 'eventlog.service', function ($scope, trans, EventLog) {
$scope.getNotable = function() {
EventLog.getNotable().then(function success(response) {
$scope.notable = response.data.length;
}, function error() {
});
};
}])
编辑:添加了控制器/工厂您正在使用哪个浏览器?你在几个浏览器上试过了吗
您确定不筛选网络请求吗 实际上,这是因为没有将逻辑包装到函数中。这意味着一旦使用了getVisigned,一个变量被声明,一个请求被激发,getVisigned将被响应填充。在另一个时间使用GetNote不会触发新请求。而是返回已存储的响应。我通过将http请求包装到函数中并返回承诺来修复它
getNotable: function () {
return $http.get(Routing.generate('epubli_api_get_eventlog_notable'));
},
您应该将逻辑封装到函数中并返回,否则在初始请求时只会加载一次。请求是一个请求,并且在网络面板中显示为请求,即使它仅从浏览器缓存提供。您确定要调用执行此请求的函数吗?我为控制器和工厂添加了代码。是的,我确定该函数已被调用,因为如果我调试,我会看到successCallback的响应。确定在“网络”选项卡中没有任何筛选器吗?@Zooly是的,我确定。我尝试过chrome和firefox,但与筛选器无关。。。我认为这与返回原始承诺有关。尝试从您的服务返回数据,而不是原始承诺,可能就是这样。。。另一个选项(不确定这是导致问题的原因..)尝试从成功回调中删除函数名。。只需使用:.then(函数(数据){$scope.noteble=data.length;});删除函数名应该没有什么区别。它不应触碰使用匿名函数的功能。它实际上是通过将工厂变量包装到一个函数中并返回如上面编辑的部分所示的承诺来修复的。