首页 > 解决方案 > Javascript返回“未定义”

问题描述

我正在尝试使用input[type=file]并在表单提交时上传文件(其中包含“名字”、“姓氏”等其他元素),我正在将文件转换为字符串并将其作为 JSON 传递给服务器。

HTML:

<input type="file" class="form-control" id="resume" accept=".doc, .docx, .pdf" />

脚本:

var resume = document.getElementById('resume').files[0];
var result = getbase64(resume);
console.log(result); 

这会返回undefined,但是console.log当上述行调用该方法时,实际方法内部会记录正确的内容。

function getBase64(file) {
    var reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = function () {
        var result = reader.result;
        console.log('here---->   '+result);
        return result;
    };
    reader.onerror = function (error) {
        console.log('Error: ', error);
    };
} 

我的问题是如何正确地将这个返回类型分配给一个变量,以便我可以将它作为字符串发送到服务器。

标签: javascriptundefined

解决方案


您的 return 语句return result不会返回您所期望的,因为它位于事件侦听器中。也就是说,函数的输出getBase64将是Undefined。当加载事件发生时,您可以简单地传递一个回调函数来传输文件。

function getBase64(file, transferMyFile) {
    var reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = function () {
        var result = reader.result;
        console.log('here---->   '+result);
        transferMyFile(result)
        /* Or just transfer it here */
    };
    reader.onerror = function (error) {
        console.log('Error: ', error);
    };
} 

推荐阅读