这是我的问题。我有一个函数应该得到一个文件并返回内容,因为我的主机提供程序不允许我使用PHP。
function getStoryFromFile(file){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
return xhttp.responseText;
}
};
xhttp.open("GET", file, true);
xhttp.send();
}
然后我发现匿名函数不能那样工作。所以我试着让它成功。
function getStoryFromFile(file){
var xhttp = new XMLHttpRequest();
var x = 'false';
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
x = 'true';
}
};
xhttp.open("GET", file, true);
xhttp.send();
if (x == 'true'){
return xhttp.responseText;
}
}
但这也不起作用。所以我试图将它调整好几个小时,没有任何效果。我得到的只是'未定义'。那么有人可以向我解释为什么Javascript不允许我以第二种方式返回内容以及为什么javascript的开发人员使语言变得难以理解。谢谢。
修改 如何让回调函数写入变量? 我有:
function displayPage(){
file = 'story1.html' //Not actually like this in file, it changes based on database but i simplified it
var toHTML = '';
getStoryFromFile(file,function(text){
toHTML += text + "<br>";
});
document.getElementById('div').innerHTML = toHTML;
}
即使匿名函数是全局函数,它也不会写入。这是现在的主要问题
答案 0 :(得分:1)
不,这些都不会起作用,因为它是一个异步调用(与匿名函数无关)。正确的做法是提供一个回调函数。
function getStoryFromFile(file, callback){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
callback(xhttp.responseText);
}
};
xhttp.open("GET", file, true);
xhttp.send();
}
getStoryFromFile('someFile', function(text){
// do something with the responseText. let's console.log it:
console.log(text);
});