0

我觉得如果我知道如何调用 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)
}
4

1 回答 1

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

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

另请注意,当您传递要用作回调的函数时,您只需使用不带括号的函数名称。如果您使用括号,您将自己调用该函数并将其返回值作为回调传递。

于 2013-11-12T04:08:20.763 回答