我觉得如果我知道如何调用xhr.addEventListener(????)的第一个属性,这可能会起作用,
var string= "I wan't to be sent as an attribute";
var xhr = new XMLHttpRequest()
xhr.addEventListener("load", uploadComplete(????, string), false)
function uploadComplete (evt, attr) {
cosnole.log(attr);
console.log(evt.target.responseText)
}
答案 0 :(得分:0)
您可以使用名为currying的技术将附加参数传递给回调函数。基本上你编写了一个匿名函数,它使用静态参数调用你的函数,并将其用作回调函数。对于你的例子,这应该工作:
function uploadComplete (evt, attr) {
console.log( attr );
console.log( evt.target.responseText );
}
var extra = "I want to be sent as an attribute";
var xhr = new XMLHttpRequest();
xhr.addEventListener( "load", function (evt)
uploadComplete( evt, extra );
}, false );
事件系统调用匿名函数并调用您的uploadComplete
函数,将它作为参数接收的事件对象和extra
的值传递给它extra
,它通过closure访问}。如果在定义回调函数时var extra = "I want to be sent as an attribute";
function uploadComplete (evt) {
console.log( extra );
console.log( evt.target.responseText );
}
var xhr = new XMLHttpRequest();
xhr.addEventListener( "load", uploadComplete, false );
变量在范围内,则不需要将其作为参数传递;你可以通过回调的闭包来访问它。
{{1}}
另请注意,当您传递要用作回调的函数时,您只需使用不带括号的函数名称。如果你使用括号,你自己调用函数并将其返回值作为回调传递。