gpt4 book ai didi

javascript - 变量未定义。 JS

转载 作者:行者123 更新时间:2023-11-28 19:53:58 24 4
gpt4 key购买 nike

我的代码不断给出“start”变量未定义错误。我在 initGame 函数中定义它,所以我不知道问题是什么。这是相关代码。

$( document ).ready(function(){
var ctx = $('#myCanvas')[0].getContext("2d");
var WIDTH = $('#myCanvas')[0].width;
var HEIGHT = $('#myCanvas')[0].height;

//...some variables
var gaps = new Point(5, 5)
var start;
//...more variables

//class Point
function Point(x, y){
this.x = x;
this.y = y;
};

//...functions not using variable 'start'

function initGame(){
$.ajax({
type: "Get",
url: "handler/initGameHandler/",
dataType: 'json',
success: function(response, e) {
//do something here if everything goes well
var width = response["width"]
var height = response["height"]

grid_size = new Point(width, height)
x = gaps.x * grid_size.x
y = gaps.y*grid_size.y
start = new Point((WIDTH - x) / 2,
HEIGHT - y);

indicator_x = start.x + padding + chip_radius
},
error: function(data) {
alert("error")
}
});
}

function startGameLoop() {
return setInterval(draw, 10);
}


function onMouseMove(evt) {
if (evt.pageX > canvasMinX && evt.pageX < canvasMaxX) {
temp = evt.pageX - canvasMinX;

var begin_x = start.x + padding
var last_x = start.x + board_size.x - padding
//code not using start
}
}

function mouseClick(evt){
if (evt.pageX > canvasMinX && evt.pageX < canvasMaxX) {
temp = evt.pageX - canvasMinX;
var begin_x = start.x + padding
var last_x = start.x + board_size.x - padding
if (temp >= begin_x && temp <= last_x) {
for (var i=0; i <= grid_size.x; i++) {
var x = start.x + chip_radius + padding
//code not using 'start'
}
}
}

}

function makeBoard(){
rect(start.x, start.y, board_size.x, board_size.y); //throws error here

var x = start.x + chip_radius + padding;
var y = start.y + chip_radius + padding;
};





function draw(){
//code
makeBoard()
//code
}

initGame()
startGameLoop()
init_mouse()
});

我还应该提到,当我对数据进行硬编码并且没有从服务器读取数据时,即在我实现 initGame() 函数之前,代码运行良好。

从服务器接收数据没有任何问题。

最佳答案

您的 makeboard() 函数正在 ajax 请求返回之前运行。您的 start 变量是在 ajax 请求的回调中分配的,这可能会在 makeboard() 之后运行,因此您会收到未定义的错误。

尝试在回调中运行 startGameLoop(),而不是在 initGame() 之后直接运行它。

例如下面的内容在您的控制台中会是这样的。

“1”

“3”

“4”

“2”

    console.log('1');    // I run first

$.ajax({
url: "/getMyData",
success: function () {
console.log('2'); // I run last
}
});

console.log('3'); // I run 2nd
console.log('4'); // I run 3rd

关于javascript - 变量未定义。 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22913175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com