我有一个 HTML 上传按钮,用于将(多个)文件发送到以 JSON 响应的服务器。基于该响应,我的应用程序流程继续。
现在,为了测试我的其余代码(取决于服务器响应),我想模拟文件上传,这样我就不必在每次重新加载时手动选择和上传新文件。
以下是我的上传方法的简化版本:
uploadToServer: function (file) {
var self = this,
data = new FormData(),
xhr = new XMLHttpRequest();
// When the request has successfully completed.
xhr.onload = function () {
var response = $.parseJSON(this.responseText);
var photo = new App.Models.Photo({
filename: response.filename,
name: response.uuid
});
var photoView = new App.Views.Photo({ model: photo });
$('.photos').append(photoView.render().el);
};
// Send to server, where we can then access it with $_FILES['file].
data.append('file', file);
xhr.open('POST', this.url);
xhr.send(data);
}
该uploadToServer
参数file
是来自FileList的File对象。如您所见,我的服务器等待.$_FILES['file']
如果 a 可以模拟一个真正的 File-object 被传递到 ,那就太棒了uploadToServer
,因为我不必担心我现有的事件,例如xhr.onload
可用xhr.onprogress
。
如果这不可能,我可以创建一个自定义uploadToServer
方法并在我的服务器上发送一个常规的 AJAX 请求和假响应。但是,我怎样才能使用我的事件(等)中的代码并将其绑定xhr.onload
到xhr.onprogress
该 AJAX 请求?