0

所以我有一个有趣的问题。我在引用其他 Javascript 文件之前声明了一个全局变量,但该变量似乎没有通过。也许我在某处错过了一步?

该变量是一个字符串,它是上传文件的内容,如下所示:

function getText(s){ //creates a global variable that can hold the file
        window.text = s;
        console.log(window.text);
  };     
  function handleFileSelect(event) {
    var files = event.target.files; // The file that is uploaded
      var reader = new FileReader();                 
     reader.onloadend = function(event){            
        getText(event.target.result); //pulling out the content of the file
        loadScript('total.js',function(){ //starts app code
            window.text
        });
     };      
    reader.readAsText(files[0],"UTF-8");//required to read the text        
};           
  try{
        document.getElementById('files').addEventListener('change',
         handleFileSelect, false); //listens for the uploaded file
  }    
  catch(e){
        alert(e);
  };

因此,一旦用户上传文件,内容就会像这样复制到 window.text 中。记录内容以确保我抓住了正确的东西。loadScript然后允许应用程序代码的其余部分开始运行。我需要我的程序等待用户指定一个文件才能继续,而且我对 AngularJS 有一些奇怪的怪癖,所以以这种方式运行它是我能想到的唯一解决方法。

的内容loadscript

function loadScript(url, callback){

var script = document.createElement("script")
script.type = "text/javascript";

script.onload = function(){
    callback();
};

script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);

};

total.js从这行代码开始,最终导致输出:

var csv=window.text;

一切正常。输出看起来应该......保存它是空的。意思是 window.text 没有正确通过。

是不是因为回调没有完成?我该如何解决这个问题?

编辑: 我的回调函数根本没有运行,我已经弄清楚了,所以这不是传递变量的问题。但是 PHPglue 的输入仍然有效。谢谢。

4

1 回答 1

0

而不是,只需在所有代码之上使用我推荐的或不使用关键字window.text声明您的变量,例如:var

var windowText;
function getText(s){
    windowText = s;
    console.log(windowText);
}

在 JavaScript 中,如果变量写在其他代码之上,它们会自动向下传递,除非它们专门在函数内限定。只要var在函数代码中不使用关键字,就可以重用windowText.

于 2013-07-10T22:17:34.790 回答