【发布时间】:2017-10-09 06:51:01
【问题描述】:
我看过下面的帖子
但是我找不到明确的答案,而且我在试图找到问题的根源时遇到了严重的麻烦,所以我在这里发帖希望有人能指出我正确的方向。
在我的代码中,我正在执行一个仅发送基本 JSON 数据的 Angular HTTP 帖子,然后在成功回调中,我使用 AJAX 将文件上传到同一服务器。 (我知道我不应该使用 jQuery 和 Angular,但我暂时无法更改)
看起来像这样
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);
}
}
})
}
不是我的确切代码,但几乎完全相同。
问题是几乎所有时间都有效,但每几百个中可能有三四个会失败。失败是指在文件上传函数上调用错误处理函数并且文件没有上传。
发生这种情况时,我得到 jqXHRStatus 0 和 jqXHRReadyState 0。
我能够复制该问题的唯一方法是在处理请求时点击浏览器上的刷新,但是用户建议他们没有这样做(尽管必须 100% 确认这一点)
我的代码中是否存在我没有看到的严重缺陷?也许传递延迟变量不是好的做法?或者我没有考虑取消ajax请求的另一种方式?同时发送谷歌分析事件是否会产生干扰?
任何建议都会很棒,如果您想了解有关此问题的更多信息,请告诉我。
【问题讨论】:
-
在请求过程中切换页面或者如果页面没有完全加载并且请求已经开始,可能会发生这种情况?如果数据不正常,可能会发生这种情况?是否触发了某些可能会中断请求的事件?你确定这一切都不是真的吗?因为我猜在处理请求时必须中断请求。
-
如何处理后端错误?也许也显示后端代码
-
如果您在复制问题时查看浏览器 devtools 控制台,可能会获得更多信息,方法是点击浏览器上的刷新。网络选项卡也可能包含更多信息(XHR 选项)
-
你能创建一个 jsfiddle jsfiddle.net 来重现问题吗?
-
您能在表单上看到您的 html 代码吗?请
标签: javascript php jquery angularjs ajax