javascript - 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);
};
}
我的问题是如何正确地将这个返回类型分配给一个变量,以便我可以将它作为字符串发送到服务器。
解决方案
您的 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);
};
}
推荐阅读
- python - Python:选择集合交集的不同元素
- javascript - 如何在 Firebase Functions 中编写 Javascript GET 请求?
- javascript - 将 Javascript 中完成的字节字符串创建复制到 Python 2.7
- vba - 下标超出范围 VBA 错误
- javascript - 将等式转换为 JavaScript
- android - EditText 在 RecyclerView 的 ViewHolder 中被切断
- php - 未捕获的错误:调用 /Volumes/Datas/Sites/dev/sicgaboma/includes/classes/Account.inc.php:25 中未定义的函数 insertUserDetails()
- c# - Entity Framework Core 2 Migration issue
- .net - Cake 构建单个项目
- ios - When you build an iOS app for testing, can you have it end up in a folder?