如何将参数从一个函数发送到另一个函数

时间:2013-12-31 17:02:20

标签: javascript

如何从函数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;
  }
}

2 个答案:

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

}