如何将文件的名称和大小传递给JavaScript的FileHandler的.onload事件。正如您所看到的,我在下面的Ajax调用中使用了(仍然未声明的)变量size
和name
。但是,我不得不从getData()
函数传递它们。
我发现Pass a parameter to FileReader onload event但它似乎对我没用。
getData('file2093',
function(e) {
new Ajax.Request('/documents/2093', {
asynchronous:true, evalScripts:true, method:'patch', parameters:'document_payload=' + btoa(e.target.result) + '&document_filename=' + btoa(name) + '&document_size=' + btoa(size)
});
})
function getData(inputField, onLoadCallback){
var input = document.getElementById(inputField);
var file = input.files[0];
var size = file.size;
var name = file.name;
var fr = new FileReader();
fr.onload = onLoadCallback
fr.readAsDataURL(file);
}
答案 0 :(得分:1)
使用bind,在第一个传递给被调用函数之后的参数,以及在函数调用期间传递的任何其他参数。
getData('',function(size,name,e){
...
});
...
fr.onload = onLoadCallback.bind(fr,size,name);
否则将onload设置为调用回调的匿名函数
fr.onload = function(e){
onLoadCallback(size,name,e);
};
如果您需要访问reader对象,也可以在第二个代码段中传递filereader对象,第一个代码段设置回调函数的上下文,以便您可以通过回调中的this
访问reader对象