所以我有一个应用程序,我在其中使用带有回形针的 jquery 文件上传来动态地将文件添加到我的数据库中。一切正常,除了当我添加一个新文件时(单击“开始上传”按钮后),页面没有刷新(但文件已正确插入数据库并发送到 amazon s3)。
我检查了控制台并注意到当我上传文件时只有一个 PUT 请求,没有应该有的 GET 请求。
顺便说一句,我还有一个演示应用程序,它的代码与我的真实应用程序相同,它正在运行。我注意到在演示应用程序中,当您上传文件时,会出现一个 PUT 请求,然后是一个 GET 请求。
所以我在不同的回调中加入了警报,发现“完成”函数存在问题。以下是“完成”的相关代码:
// Callback for successful uploads:
done: function (e, data) { alert('done');
var that = $(this).data('fileupload'),
template;
if (data.context) { alert('done: if');
data.context.each(function (index) {
var file = ($.isArray(data.result) &&
data.result[index]) || {error: 'emptyResult'};
if (file.error) { alert('done: file.error');
that._adjustMaxNumberOfFiles(1);
}
that._transition($(this)).done(
function () { alert('done: function');
var node = $(this);
template = that._renderDownload([file])
.css('height', node.height())
.replaceAll(node);
that._forceReflow(template);
that._transition(template).done(
function () { alert('done: function2');
data.context = $(this);
that._trigger('completed', e, data);
}
);
}
);
});
在演示应用程序中,上述代码中的所有警报消息都被命中。但是,在我的真实应用程序中,只有 alert('done: if') 被击中。这意味着 _renderDownload 和 _forceReflow 没有被调用,这导致文件列表在我重新加载页面之前不会被刷新。
此外,如果这有帮助,我在演示应用程序和真实应用程序中的所有相关回调中添加了警报,以确定是否没有调用某些内容,我将按顺序列出每个调用的警报(注意:这些在我点击“开始上传”按钮后会调用警报):
演示应用:
_startHandler
start
send
done
done: if statement
done: function
_renderDownload
_forceReflow
done: function2
stop
stop2
真实应用:
_startHandler
start
send
done
done: if
stop
stop2