【问题标题】:JS function returns null - helpJS 函数返回 null - 帮助
【发布时间】:2011-07-09 04:16:55
【问题描述】:

我正在尝试修改示例http://www.html5rocks.com/en/tutorials/file/dndfiles/#toc-reading-files 以使函数handleFileSelect(evt) 返回reader.result;我的意思是让函数返回base64的图像左右。 我试图用函数编写它,但它只返回 null :( 所以我的问题是如何让函数返回base64?

至于现在我试着写这个sn-p...

function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // Loop through the FileList and render image files as thumbnails.
    for (var i = 0, f; f = files[i]; i++) {

      // Only process image files.
      if (!f.type.match('image.*')) {
        continue;
      }

      var reader = new FileReader();

      // Closure to capture the file information.
      reader.onload = (function(theFile) {
        return function(e) {
          // Render thumbnail.
          var span = document.createElement('span');
          span.innerHTML = ['<img class="thumb" src="', e.target.result,
                            '" title="', theFile.name, '"/>'].join('');
          document.getElementById('list').insertBefore(span, null);
        };
      })(f);

      // Read in the image file as a data URL.
      reader.readAsDataURL(f);
    }
    return reader.result;
  }

感谢所有有用的 cmets :)

【问题讨论】:

  • 接受答案的19个问题?
  • 请贴出问题的代码。

标签: javascript fileapi


【解决方案1】:

我不详细了解 FileReader 对象,但它看起来像是从 URL 异步读取数据。这意味着当您的函数返回 reader.result 时,FileReader 对象尚未完成对文件的读取。在调用 onload 回调(或发生其他一些错误情况)之前,这不会完成。

因此,当读取仍在异步发生时,您的函数会返回。因此,结果尚未确定。结果将在 onload 回调或(我猜)在其他表示错误条件(onabort、onerror 等)的回调中可用。

【讨论】:

  • 我也这么认为。但我想如何让它返回结果?
  • 您无法从该函数返回结果。如果您想知道结果,那么您必须挂钩各种事件处理程序(您已经在挂钩 onload),然后从这些事件处理程序中,您可以将结果传达给您需要传达的任何内容。这是异步编程——你必须以不同的方式进行。
  • @jfriend00 是的 ... @user592704 这是 javascript 编程的新范式。它可能看起来像 C,但它不是 C。
  • 那么当它作为 e.target.result 工作时?但是如果只是通过它的 id 来调用元素呢?我的意思不是在单击“文件”按钮时,而是在任何时候它包含一个 url?
  • @user592704:我不明白你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多