反复调用一个命中php文件的函数

时间:2016-11-22 18:41:25

标签: javascript php jquery

我有一个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

2 个答案:

答案 0 :(得分:3)

问题是,在程序的其余部分运行完毕后,对php服务器的ajax调用会得到解决。此时getWord()函数的工作方式如下:

  1. 创建变量word。目前word等于undefined
  2. 以异步方式START调用php服务器。
  3. 返回word,此时仍然等于undefined
  4. 返回word后,异步调用将得到解决,并且将执行回调函数。
  5. 而不是从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分配。尝试将$.ajaxasync:false参数一起使用。