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

在下面的代码中,我需要在函数中读取变量的值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);

  }

}


一只名叫tom的猫
浏览 298回答 1
1回答

倚天杖

var ext =...从只为该函数创建局部变量的读取器回调中删除(它没有设置外部变量。即使您删除var关键字以便它开始设置外部ext变量,您最终也会遇到此 q&a 中讨论的问题将您的分配移动到循环的顶部(而不是函数的顶部)。并使用它let代替var这种方式,它是块范围的,不会遇到前面提到的问题for(var i = 0; i<file_input.files.length; i++) {&nbsp; &nbsp; var file = file_input.files[i];&nbsp; &nbsp; let ext = file.name.split('.').pop();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript