我想从onreadystatechange AJAX调用返回一个值...我发现这个网页:stackoverflow link。我虽然我有它的工作,但意识到添加或删除fn函数没有区别。下面的代码工作:从onreadystatechange返回值与回调
username_is_available();
function username_is_available() {
var username = document.getElementById('username').value;
get_data('username', username, function(returned_value) {
if (returned_value == 'true') {
document.getElementById('username_err').innerHTML = 'Taken';
} else {
document.getElementById('username_err').innerHTML = 'Available';
};
});
}
function get_data(data_type, data, fn) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
fn(xmlhttp.responseText);
}
};
xmlhttp.open("GET", "availability.php?" + data_type + "=" + data, true);
xmlhttp.send();
}
这一切工作正常,但是这不是我的目标,我想一个函数username_is_available()如果用户名确实可以返回true。 相反,在这里我发生了一个动作(innerHTML被改变)。如果我尝试在匿名函数中进行返回,则会得到与直接在onreadystatechange中返回结果相同的结果:var unasigned
对于那些即将点击'重复线程'的人,此isn重复的。 我一直在它5小时以上
在你最后的例子中,我认为'taken'应该是'available'。 –
您为'taken'指定一个值并使用未声明的变量'available'。变量名'taken'应该是'available',因为它从一个函数中接收一个布尔值,其中包含短语'is_available'。 –
@PatrickRoberts良好的发现,我被抓住了第一个答案的嗡嗡声,疯狂地在文本框中编写代码,而不是像我平时所做的那样编写适当的编辑器和粘贴。谢谢! – Scott