如何从函数func()获取 par 值并将其用于附加到另一个函数handlerFunction()
中的a_span元素。
par是一个ID。在handlerFunction()
中,我需要a_spanID
。
例如:
document.getElementById('a_span35')
function func(par) {
XMLHttp.open("POST", "some.php");
XMLHttp.onreadystatechange = handlerFunction();
XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XMLHttp.send("post_name="+par);
}
function handlerFunction() {
if (XMLHttp.readyState == 4) {
document.getElementById('a_span').innerHTML=XMLHttp.responseText;
}
}
答案 0 :(得分:5)
最简单的方法是将handlerFunction
放在 func
内,以便关闭par
(但我会在下面给你一个替代方案):< / p>
function func(par) {
XMLHttp.open("POST", "some.php");
XMLHttp.onreadystatechange = handlerFunction;
XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XMLHttp.send("post_name=" + par);
function handlerFunction() {
// You can use `par` here, even though `func` has already returned
if (XMLHttp.readyState == 4) {
document.getElementById('a_span').innerHTML = XMLHttp.responseText;
}
}
}
handlerFunction
是对func
调用的上下文中的闭包。不要担心这个词closures are not complicated。
另请注意,您在上面修正过的代码中有错误:您有
XMLHttp.onreadystatechange = handlerFunction();
... 立即调用 handlerFunction
并将其返回值分配给onreadystatechange
(完全按x = foo();
调用的方式 { {1}}并将返回值分配给foo
)。它应该是:
x
我假设你正在创建XMLHttp.onreadystatechange = handlerFunction;
的某个地方(我建议为每次调用XMLHttp
创建一个新的,而不是重用一个)。
替代方案:
您可以通过手动将调用包装在另一个函数中来保持func
分开:
handlerFunction
...或使用ES5的function func(par) {
XMLHttp.open("POST", "some.php");
XMLHttp.onreadystatechange = function() {
handlerFunction(XMLHttp, par);
};
XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XMLHttp.send("post_name=" + par);
}
function handlerFunction(xhr, par) {
if (xhr.readyState == 4) {
// use par
document.getElementById('a_span').innerHTML = xhr.responseText;
}
}
:
Function#bind
您需要在没有本地浏览器的浏览器上使用function func(par) {
XMLHttp.open("POST", "some.php");
XMLHttp.onreadystatechange = handlerFunction.bind(undefined, XMLHttp, par);
XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XMLHttp.send("post_name=" + par);
}
function handlerFunction(xhr, par) {
if (xhr.readyState == 4) {
// use par
document.getElementById('a_span').innerHTML = xhr.responseText;
}
}
的填充程序。 Function#bind
所做的是返回一个函数,该函数在被调用时,使用给定的bind
值(第一个参数)和提供它的参数调用原始函数。
答案 1 :(得分:0)
你可以这样做:
function func(par) {
XMLHttp.open("POST", "some.php");
XMLHttp.onreadystatechange = function() {
if (XMLHttp.readyState == 4) {
document.getElementById('a_span').innerHTML=XMLHttp.responseText;
}
};
XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XMLHttp.send("post_name="+par);
}