我有一个php文件,它回显了一个json编码的单词。我有一个javascript函数来检索这个单词。我想调用这个函数,检查返回的单词是否已经在数组中,如果是,我想调用另一个单词。我基本上想重复这个过程,直到我得到一个单词已经不在我的数组中。我正在努力解决这个问题,所以我需要一些关于如何做到这一点的建议。我想只在客户端这样做。目前,当我调用getWord()时,它返回undefined但函数本身有效,所以我怀疑当时没有检索到这个词。
users = ldap_text.split(/,\s*/m).map do |grp|
grp.each_line.map { |line| line.strip.split(/:\s*/) }.to_h
end
答案 0 :(得分:3)
问题是,在程序的其余部分运行完毕后,对php服务器的ajax调用会得到解决。此时getWord()
函数的工作方式如下:
word
。目前word
等于undefined
。word
,此时仍然等于undefined
。word
后,异步调用将得到解决,并且将执行回调函数。而不是从getWord()
返回一个单词,您应该返回此异步调用创建的promise并在main函数中处理结果。像这样:
function getWord(){
return $.getJSON("getWord.php");
}
$(document).ready(function() {
$("#newRound").on("click",function(){
getWord().done(function(currentWord) {
alert("The current word is " + currentWord);
//check here if data is already in wordsSoFar arary and if it is, get another word from getword.php
document.getElementById("input1").style.visibility = 'visible';
//currentWord = data; //set the current work
lives = 6; //reset lives
tracker = 0;
incorrectLettersGuessed = "";
allGuessedLetters = "";
updateLetters();
document.getElementById('hangman').innerHTML = '<center><img src="stage1.png"></center>';
createTable(currentWord);
output.innerHTML = '<center>'+messages.validLetter + '</center>';
alert(currentWord);
});
});
});
除了这个问题之外,没有必要在$(document).ready
函数中使用getWord
。只有在加载文档时才会调用该函数。
答案 1 :(得分:0)
我想,问题是,在您的getWord
函数return
执行 BEFORE 后,服务器已回答并发生了word
分配。尝试将$.ajax
与async:false
参数一起使用。