jQuery只适用于localhost

时间:2016-06-18 13:26:45

标签: javascript jquery

我的js游戏在localhost(apache2)上运行良好,但在我的服务器上(以及github页面 - 源代码来自),游戏无法正常工作。 jQuery已加载,并且在Chrome控制台中工作正常。 $(document).ready似乎无法正常工作。 main.js的代码在这里,这是github repository link。 words.json是一个1mb字的dictonary。 github上的游戏以前工作过。有什么想法吗?

$.getScript("js/timer.js");
$.getScript("js/functions.js");
$.getJSON( "js/words.json").then(start);

var typos = 0;
var item;
var typedwords = [];
var correct;
var words;
var words_obj;

function start(response) {
  words = response["words"];
  $("#times").html("");
}

$(document).ready(function() {
  if (getParameterByName("seed") == undefined) {
    window.location.replace(window.location.href + "?seed=" + makeid());
  };

  Math.seed = getParameterByName("seed");

  $("#start").click(function() {
    $(".header").slideUp();
    regenerate();
  });

  $("body").keyup(function(e) {
    if (String.fromCharCode(e.which).toLowerCase() == item.charAt(correct).toLowerCase()) {
      $("#"+correct).addClass("active");
      correct ++;
      if (correct == item.length) {
        typedwords.push(item);
        $("#times").append(time.toFixed(2)+" ("+item+")<br>")
        regenerate();
      };
    }
    else {
      time += 1;
      typos++;
    };
  });
});

function regenerate() {
  stopTimer();
  saveLastTime();
  resetTimer();
  startTimer();

  correct = 0;
  item = words[Math.floor(Math.seededRandom(words.length,0))];
  text = "";

  for (i = 0; i < item.length; i++) {
    text += "<span id='" + i +"'>"+item.charAt(i)+"</span>";
  };

  $("#text").html("");
  $("#text").html(text);
}

2 个答案:

答案 0 :(得分:4)

您正在使用$.getScript在您的网页中包含JS代码。这不是正确的方式,因为$.getScript是异步的,并且在DOM被视为已加载并且所有$(document).ready(...)回调被调用并且您正在访问定义的变量之前无法保证完成在一个这样的回调中的那些文件中。

您应该在HTML中使用<script src=...></script>包含两个脚本:

<script src="js/timer.js" charset="utf-8"></script>
<script src="js/functions.js" charset="utf-8"></script>

答案 1 :(得分:-1)

另一种解决方法是在HTML中执行

<script>
  if (window.jQuery) {
    document.write('<script type="text/javascript" src="js/timer.js"><\/script>')
    document.write('<script type="text/javascript" src="js/functions.js"><\/script>')
  }
</script>