2013-07-10 30 views
0

所以我有一个有趣的问题。我在引用其他Javascript文件之前声明了一个全局变量,但该变量似乎并未实现。也许我错过了某个步骤?通过回调函数传递全局Javascript变量到其他JS文件

该变量是一个字符串,它是上载文件的,像这样的内容:

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有一些奇怪的怪癖,所以以这种方式运行它是我能想到的唯一解决方法。 }

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); 

;:

loadscript内容

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

var csv=window.text; 

一切正常。输出看起来应该是......保存为空。含义window.text不能正确拉取。

这是否是由于回调,它并没有完全通过?我该如何解决这个问题?

编辑: 从我的回调函数根本没有运行在所有的,我已经想通了,所以它不是通过传递变量的问题。但是,PHPglue的输入仍然有效。谢谢。

+0

也许与这个问题有关? http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call – elclanrs

+0

是window.text总是空的?或者在getText函数中?或者在文件total.js中?或者在回调中? – dievardump

回答

0

相反的window.text,只是声明了你的变量,我建议,或不var关键字,上面所有的代码,如:

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

在JavaScript中的变量自动进行下去,如果他们写高于其他代码,除非它们是特定于函数内的范围。只要您不在功能代码中使用var关键字,就可以重复使用windowText