0

如何将文件的名称和大小传递给 JavaScript 的 FileHandler 的 .onload 事件。如您所见,我在下面的 Ajax 调用中使用了(仍未声明的)size变量name。但是,我必须以某种方式从getData()函数中传递它们。

我发现将参数传递给 FileReader onload 事件,但它似乎对我不起作用。

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);
}
4

1 回答 1

1

使用bind,将第一个参数传递给被调用函数,以及在函数调用期间传递的任何其他参数。

getData('',function(size,name,e){
...
});
...
fr.onload = onLoadCallback.bind(fr,size,name);

否则将 onload 设置为调用回调的匿名函数

fr.onload = function(e){
  onLoadCallback(size,name,e);
};

如果您需要访问阅读器对象,请在第二个片段中传递 filereader 对象,第一个片段设置回调函数的上下文,以便您可以在回调中访问阅读器this对象

于 2014-06-25T08:09:31.390 回答