innerHTML显示函数,而不是函数的返回值

innerHTML显示函数,而不是函数的返回值

问题描述:

试图干掉我写的一些旧的javascript。innerHTML显示函数,而不是函数的返回值

试验(+)

function test() { 
    var output = function() { 
     return ajaxPost("test.php", "testvar=bananas"); 
    } 
    document.getElementById("main").innerHTML = output; 
} 

ajaxPost()

function ajaxPost(file,stuff) { 
    var xmlhttp; 
    var actionFile = file; 
    var ajaxVars = stuff; 

    if (window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } else { 
     // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      return xmlhttp.responseText; 
     } else { 
      // Waiting... 
     } 
    } 

    xmlhttp.open("POST", actionFile, true); 

    //Send the proper header information along with the request 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

    xmlhttp.send(ajaxVars); 
} 

,我receiveing输出是这样的:

<div id="main"> 
    function() { return ajaxPost("test.php", "testvar=bananas"); } 
</div> 

我想不出为什么它坚持在迪的功能v而不是函数应该实际执行的操作。有什么想法吗?

+0

您的脚本将无法工作无论哪种方式,由于AJAX的异步特性。您还需要设置innerHTML异步。 – 2013-04-09 15:45:02

+0

对......如何?这就是我想要弄明白的。 – jdstankosky 2013-04-09 15:56:41

您必须执行此功能,方法是将()添加到它,否则您会收到函数体!

function test() { 
    var output = function() { 
     return ajaxPost("test.php", "testvar=bananas"); 
    } 
    document.getElementById("main").innerHTML = output(); 
} 

而且试图从AJAX调用返回一个值这里

return xmlhttp.responseText; 

这不会工作在异步调用没有什么映入返回值! 你应该调用某种使用返回值的回调函数。


编辑

这将类似于你的代码的回调方法:

function test(data) { 
    document.getElementById("main").innerHTML = data; 
} 

function ajaxPost(file,stuff,cb) { 

    // ... 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      cb(xmlhttp.responseText); 
     } else { 
      // Waiting... 
     } 
    } 
    // ... 
} 

// make the actual call 
ajaxPost("test.php", "testvar=bananas", test); 
+0

你有一个如何使用回调来做到这一点的例子吗? – jdstankosky 2013-04-09 15:57:24

+0

只需将功能,你想在AJAX调用后出现在一个单独的函数中,并调用这个函数而不是'return'语句。 – Sirko 2013-04-09 16:00:01

+0

你在说''ajaxPost()'里面? – jdstankosky 2013-04-09 16:01:24