从我的 WS 处理 304 - 承诺响应未定义
Handle 304 from my WS - promise response is undefined
信息:使用 AngularJS v1.3.15
EDIT : this issue seems more related to how to handle a 304 response
from my webserver rather than ng-file-upload. I change title
我正在尝试从我的网络服务器管理 304 回调,但我遇到了以下问题:
TypeError: Cannot read property 'data' of undefined
at ng-file-upload.js:79
at angular.min.js:112
at n.$get.n.$eval (angular.min.js:126)
at n.$get.n.$digest (angular.min.js:123)
at n.$get.n.$apply (angular.min.js:126)
at l (angular.min.js:81)
at M (angular.min.js:85)
at XMLHttpRequest.F.onload (angular.min.js:86)
ng-file-upload.js 的第 79 行如下:
promise.success = function (fn) {
promise.then(function (response) {
console.log(response,config); // HERE RESPONSE IS UNDEFINED
fn(response.data, response.status, response.headers, config);
});
return promise;
};
我要上传的代码如下:
当我的 WebService 发送 200 响应时,此代码运行良好。
Upload.upload({
url: $localStorage.endPointVersion + "sky/!/avatar",
fields: {},
file: file
}).progress(function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);
}).success(function (data, status, headers, config) {
console.log('file ' + config.file.name + 'uploaded. Response: ', data);
}).error(function (data, status, headers, config) {
console.log('error ' + config.file.name + 'uploaded. Response: ' + data);
});
当文件已经存在于网络服务器上时,我的网络服务发送一个 304 响应。
至此,我开发了一些拦截器,看到304确实被处理成了responseError。
$httpProvider.interceptors.push(['$location', '$injector', '$q', function($location, $injector, $q) {
return {
'responseError': function(rejection) {
$log = $log || $injector.get('$log');
if (rejection.status === 304) {
// I have tried to reject it to go into error of upload, without success
return $q.reject(rejection);
}
}
};
}]);
第一个问题:这个响应码正常吗?正确的 ?如果不是,什么是处理 "no change / not modified" POST 的适当响应?将 Web 服务器上的 304 响应更改为另一个响应是可能的,但会产生巨大影响。如果可能的话,我想防止更改它并正确管理 webapp 304 响应
第二个问题(和主体):我应该如何管理来自我的网络服务器的这个 304 响应?
我看到了这一点:
说 angular 有效状态是 return 200 <= status && status < 300;
我最终更改了后端响应以不同方式处理代码状态。
这个问题解决了。
信息:使用 AngularJS v1.3.15
EDIT : this issue seems more related to how to handle a 304 response from my webserver rather than ng-file-upload. I change title
我正在尝试从我的网络服务器管理 304 回调,但我遇到了以下问题:
TypeError: Cannot read property 'data' of undefined
at ng-file-upload.js:79
at angular.min.js:112
at n.$get.n.$eval (angular.min.js:126)
at n.$get.n.$digest (angular.min.js:123)
at n.$get.n.$apply (angular.min.js:126)
at l (angular.min.js:81)
at M (angular.min.js:85)
at XMLHttpRequest.F.onload (angular.min.js:86)
ng-file-upload.js 的第 79 行如下:
promise.success = function (fn) {
promise.then(function (response) {
console.log(response,config); // HERE RESPONSE IS UNDEFINED
fn(response.data, response.status, response.headers, config);
});
return promise;
};
我要上传的代码如下: 当我的 WebService 发送 200 响应时,此代码运行良好。
Upload.upload({
url: $localStorage.endPointVersion + "sky/!/avatar",
fields: {},
file: file
}).progress(function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);
}).success(function (data, status, headers, config) {
console.log('file ' + config.file.name + 'uploaded. Response: ', data);
}).error(function (data, status, headers, config) {
console.log('error ' + config.file.name + 'uploaded. Response: ' + data);
});
当文件已经存在于网络服务器上时,我的网络服务发送一个 304 响应。
至此,我开发了一些拦截器,看到304确实被处理成了responseError。
$httpProvider.interceptors.push(['$location', '$injector', '$q', function($location, $injector, $q) {
return {
'responseError': function(rejection) {
$log = $log || $injector.get('$log');
if (rejection.status === 304) {
// I have tried to reject it to go into error of upload, without success
return $q.reject(rejection);
}
}
};
}]);
第一个问题:这个响应码正常吗?正确的 ?如果不是,什么是处理 "no change / not modified" POST 的适当响应?将 Web 服务器上的 304 响应更改为另一个响应是可能的,但会产生巨大影响。如果可能的话,我想防止更改它并正确管理 webapp 304 响应 第二个问题(和主体):我应该如何管理来自我的网络服务器的这个 304 响应?
我看到了这一点:
说 angular 有效状态是 return 200 <= status && status < 300;
我最终更改了后端响应以不同方式处理代码状态。
这个问题解决了。