向XHR回调函数添加属性

时间:2013-11-12 03:09:49

标签: javascript ajax xmlhttprequest jqxhr

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

1 个答案:

答案 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}}

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