我有以下代码。该字符串正在正确发送到uploadFile
,但是alert(str)
行给了我undefined
?
function uploadFile(str){
alert(str); //prints correctly
var fileTag = document.getElementById('fileinput');
var file = fileTag.files[0];
var xmlhttp=new XMLHttpRequest();
var formData = new FormData();
formData.append("thefile", file);
xmlhttp.addEventListener("load", function(evt,str){
alert(str); //undefined
}, false);
....
}
我对javascript很新,所以有人能告诉我为什么会这样吗?谢谢
答案 0 :(得分:0)
从功能声明
中删除str
xmlhttp.addEventListener("load", function(evt){
alert(str); //alerts str
}, false);
答案 1 :(得分:0)
事件处理函数接收单个参数:event
对象。
您的事件处理程序
function(evt,str) { }
需要两个参数。当然,因为它没有收到第二个str
,所以你得到str
未定义。
如果您希望事件处理程序使用str
变量(定义为function uploadFile(str){ }
的参数),则可以这样做,因为evet处理函数是在{{1}内定义的功能。这称为闭包。只需改变
uploadFile(str){ }
到
function(evt, str){ }
通过这种方式,您可以删除function(evt) { }
中隐藏外部内容的str
的内部定义。所以在
uploadFile(str)
您将真正收到字符串xmlhttp.addEventListener("load", function(evt,str){
alert(str);
}, false);
的提醒。