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而不是函数应该实际执行的操作。有什么想法吗?
您必须执行此功能,方法是将()
添加到它,否则您会收到函数体!
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);
你有一个如何使用回调来做到这一点的例子吗? – jdstankosky 2013-04-09 15:57:24
只需将功能,你想在AJAX调用后出现在一个单独的函数中,并调用这个函数而不是'return'语句。 – Sirko 2013-04-09 16:00:01
你在说''ajaxPost()'里面? – jdstankosky 2013-04-09 16:01:24
您的脚本将无法工作无论哪种方式,由于AJAX的异步特性。您还需要设置innerHTML异步。 – 2013-04-09 15:45:02
对......如何?这就是我想要弄明白的。 – jdstankosky 2013-04-09 15:56:41