为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 XMLHttpRequest.onreadystatechange 回调函数中读取

如何在 XMLHttpRequest.onreadystatechange 回调函数中读取

一只名叫tom的猫 2022-01-07 10:44:27
在下面的代码中,我需要在函数中读取变量的值ext(在函数内部定义reader.onloadend)xhr.onreadystatechange。眼下正在回归undefined。任何想法如何解决这个问题?function file_upload(file_input) {  var name = file_input.dataset.target;  var url = file_input.dataset.url;  var path = file_input.dataset.path;  var ext;  for(var i = 0; i<file_input.files.length; i++) {    var file = file_input.files[i];    var xhr = new XMLHttpRequest();    xhr.open("POST", url, true);    xhr.onreadystatechange = function() {        if (xhr.readyState == 4 && xhr.status == 200) {            var id = xhr.responseText;            var input = document.createElement("input");            input.setAttribute("type", "hidden");            input.setAttribute("name", name);            input.setAttribute("value", id);            document.getElementById("btn_uload_"+name+"_"+ext).append(input);            document.getElementById("empty_file").style.display = 'none';            document.getElementById("single_file_"+ext).style.display = 'block';        }    };    var reader  = new FileReader();    reader.onloadend = function() {      var bytes = reader.result;      var ext = file.name.split(".").pop();      var formData = new FormData();      formData.append('bytes', bytes);      formData.append('type', ext);      xhr.send(formData);    }    reader.readAsDataURL(file);  }}
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

var ext =...从只为该函数创建局部变量的读取器回调中删除(它没有设置外部变量。即使您删除var关键字以便它开始设置外部ext变量,您最终也会遇到此 q&a 中讨论的问题


将您的分配移动到循环的顶部(而不是函数的顶部)。并使用它let代替var这种方式,它是块范围的,不会遇到前面提到的问题


for(var i = 0; i<file_input.files.length; i++) {

    var file = file_input.files[i];

    let ext = file.name.split('.').pop();


查看完整回答
反对 回复 2022-01-07
  • 1 回答
  • 0 关注
  • 297 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信