我正在使用JavaScript创建一个疯狂的libs风格的webapp,我试图将几个不同文本文件的行加载到相同数量的不同数组中,并且我遇到了麻烦弄清楚如何让它发挥作用。一切都在服务器上,文本文件也在服务器上。
我只使用一个文本文档,但我不能只使用一个文档作为最终产品,因为我需要4种不同的单词类型,其中每个.txt文件都是一个单词类型的列表。最后,代码在先前确定的位置使用结果数组的值,并将该单词插入到一个句子中(一个名为" generatedidea"的变量)。
有人可以帮我弄清楚如何使这项工作?或者建议一个更好的方法来做到这一点?当我现在运行它时,我得到的是关于文档的每个警报都没有准备好解析两次......
var typesFile = new XMLHttpRequest();
var types = [];
typesFile.open("GET", "values/gametypes.txt", true);
typesFile.onreadystatechange = function()
{
if (typesFile.readyState === 4) { // document is ready to parse.
if (typesFile.status === 200) { // file is found
types = typesFile.responseText.split("\n");
} else alert("gametypes.txt not found");
} else alert("gametypes.txt not ready to parse");
}
typesFile.send(null);
var nounsFile = new XMLHttpRequest();
var nouns = [];
nounsFile.open("GET", "values/nouns.txt", true);
nounsFile.onreadystatechange = function()
{
if (nounsFile.readyState === 4) { // document is ready to parse.
if (nounsFile.status === 200) { // file is found
nouns = nounsFile.responseText.split("\n");
} else alert("nouns.txt not found");
} else alert("nouns.txt not ready to parse");
}
nounsFile.send(null);
var verbsFile = new XMLHttpRequest();
var verbs = [];
verbsFile.open("GET", "values/verbs.txt", true);
verbsFile.onreadystatechange = function()
{
if (verbsFile.readyState === 4) { // document is ready to parse.
if (verbsFile.status === 200) { // file is found
verbs = verbsFile.responseText.split("\n");
} else alert("verbs.txt not found");
} else alert("verbs.txt not ready to parse");
}
verbsFile.send(null);
generatedidea += "A ";
generatedidea += types[gt] + " ";
generatedidea += "game where a ";
if (a1 >= 0) generatedidea += nouns[a1] + " ";
generatedidea += nouns[n1] + " ";
generatedidea += verbs[v1] + " a ";
if (a2 >= 0) generatedidea += nouns[a2] + " ";
generatedidea += nouns[n2];
if (n3 >= 0) {
generatedidea += " while ";
if (a3 >= 0) {generatedidea += nouns[a3] + " ";}
generatedidea += nouns[n3] + " ";
}
if (v2 >= 0) generatedidea += verbs[v2] + " a ";
if (n4 >= 0) {
if (a4 >= 0) {generatedidea += nouns[a4] + " ";}
generatedidea += nouns[n4];
}
generatedidea += ".<br />";
答案 0 :(得分:0)
你应该记住,JavaScript是异步工作的。因此,在为onreadystatechange
定义闭包/函数之后,代码将继续执行。最后像
generatedidea + =名词[n1] +&#34; &#34 ;; generatedidea + =动词[v1] +&#34; a&#34 ;;
在解析由AJAX调用检索的数据之前将执行(站点说明:您是否正确定义了变量gt
,a1
,...?
我建议您使用jQuery及其API for deferred objects。例如:
var ajaxCall1 = $.get("url1", function (data) { /* do parsing here */ });
var ajaxCall2 = $.get("url2", function (data) { /* do parsing here */ });
$.when(ajaxCall1, ajaxCall2, ...).done(function () {
// every AJAX call is done, do the rest...
});