나는 다음과 같은 스레드에서 보았다 나는 확실한 대답을 찾을 수 없습니다 내가 심각한 문제 찾기 위해 노력을 겪고 그러나아약스 파일 업로드 상태 코드를 반환 0 준비 상태 0 (만 가끔)
내 문제의 근원 그래서 누군가가 올바른 방향으로 나를 가리킬 수 있기를 희망합니다. 내 코드에서
나는 그때가 같은 서버에 파일을 업로드 AJAX를 사용하고있는 성공 콜백 내에서, 단지 기본 JSON 데이터를 보내는 각도 HTTP 포스트를 수행하고있다.
는그것은이
var deferred = $q.defer()
// first post
$http.post(url,payload,{params: params, headers: headers)
.then(function(response) {
uploadFiles(response,deferred);
// I am also sending google analytics events here
}, function(error) {
// do error stuff
}
return deferred.promise;
// upload files function
function uploadFiles(response,deferred){
$ajax({
type: 'POST',
processData: false,
contentType: false,
data: data // this new FormData() with files appended to it,
url: 'the-endpoint-for-the-upload',
dataType: 'json',
success: function(data) {
// do success stuff here
deferred.resolve(data);
},
error: function(jqXHR, textStatus, errorThrown) {
var message = {};
if (jqXHR.status === 0) {
message.jqXHRStatusIsZero = "true";
}
if (jqXHR.readyState === 0) {
message.jqXHRReadyStateIsZero = "true";
}
if (jqXHR.status === '') {
message.jqXHRStatusIsEmptyString = "true";
}
if (jqXHR.status) {
message.jqXHRStatus = jqXHR.status;
}
if (jqXHR.readyState) {
message.jqXHRReadyState = jqXHR.readyState;
}
if (jqXHR.responseText) {
message.jqXHR = jqXHR.responseText;
}
if (textStatus) {
message.textStatus = textStatus;
}
if (errorThrown) {
message.errorThrown = errorThrown;
}
message.error = 'HTTP file upload failed';
logError(message);
deferred.resolve(message);
}
}
})
}
하지 내 정확한 코드를하지만 거의 동일한 같은 형태 (나는 그러나 나는 순간이 변경할 수 없습니다 jQuery를하고 각도를 사용하지 않아야 알고있다).
문제는 그 실패마다 몇 백에서 거의 작품 모든 시간,하지만 어쩌면 서너입니다. 오류 처리기 함수가 파일 업로드 함수에서 호출되고 파일이 업로드되지 않는다는 것을 의미합니다. 이 경우
나는 jqXHRStatus 0 jqXHRReadyState 0을 얻는다.
내가 문제를 복제 할 수 있어요 유일한 방법은 요청이 처리되고있는 브라우저에서 새로 고침을 치는 것입니다, 그들은이 일을하지 않는 그러나 사용자가 권고 한
(100 % 확인이에가 있지만)내가 본 것이 아닌 코드에 심각한 결함이 있습니까? 어쩌면 지연된 변수를 전달하는 것이 좋지 않을까요? 아니면 아약스 요청을 취소하는 다른 방법은 내가 고려하고 있지 않습니까? 동시에 Google Analytics 이벤트를 보내면 방해가 될 수 있습니까?
모든 조언을 제공해 주시면 문제에 대한 자세한 정보를 알려 주시기 바랍니다.
페이지 요청시 전환 또는 어쩌면 완전히로드하지 않고 요청이 이미 시작하면되는 경우가 발생할 수 있습니다? 데이터가 o.k가 아닌 경우에 발생할 수 있습니다. 일부 이벤트가 해고 될 수 있습니까? 그게 사실이 아냐? 뭔가 처리가 진행되는 동안 요청이 중단되어야하기 때문입니다. – Blackbam
어떻게 백엔드 오류를 처리합니까? 백엔드 코드도 표시 될 수 있습니다. – alepeino
브라우저를 볼 때 브라우저에서 새로 고침을 눌러 문제를 재현 할 때 자세한 정보를 얻을 수 있습니다. 네트워크 탭에는 추가 정보가있을 수 있습니다 (XHR 옵션) – KorreyD