我遇到一个问题,我收到的错误是......
“未捕获的TypeError:对象f771b328ab06没有方法'addLocation'”
我真的不确定是什么导致了这一点。 'f771b328ab06'
是错误中的用户ID。我可以添加新用户并防止用户被复制,但当我尝试将他们的位置添加到列表时,我收到此错误。
有人看到出了什么问题吗?错误也发生在初始化函数的else
语句中(如果用户ID存在,只需附加位置而不创建新用户)。我在代码中有一些注释,我很确定这部分是由于我修改了另一个用户提供的示例。
function User(id) {
this.id = id;
this.locations = [];
this.getId = function() {
return this.id;
};
this.addLocation = function(latitude, longitude) {
this.locations[this.locations.length] = new google.maps.LatLng(latitude, longitude);
alert("User ID:" );
};
this.lastLocation = function() {
return this.locations[this.locations.length - 1];
};
this.removeLastLocation = function() {
return this.locations.pop();
};
}
function Users() {
this.users = {};
//this.generateId = function() { //I have omitted this section since I send
//return Math.random(); //an ID from the Android app. This is part of
//}; //the problem.
this.createUser = function(id) {
this.users[id] = new User(id);
return this.users[id];
};
this.getUser = function(id) {
return this.users[id];
};
this.removeUser = function(id) {
var user = this.getUser(id);
delete this.users[id];
return user;
};
}
var users = new Users();
function initialize() {
alert("Start");
$.ajax({
url: 'api.php',
dataType: 'json',
success: function(data){
var user_id = data[0];
var latitude = data[1];
var longitude = data[2];
if (typeof users.users[user_id] === 'undefined') {
users.createUser(user_id);
users.users[user_id] = "1";
user_id.addLocation(latitude, longitude); // this is where the error occurs
}
else {
user_id.addLocation(latitude, longitude); //here too
alert(latitude);
}
}
})
}
setInterval(initialize, 1000);
由于我从手机获取ID并且不需要在此处生成(仅接收它),因此我注释掉了创建随机ID的部分。在执行此操作时,我必须在createUser
中的Users()
方法中添加一个参数,以便我可以将ID作为Initialize()
中的参数传递。查看以下createUser
的更改:
之前,使用生成的ID(生成数字的部分位于带有注释的上述代码块中):
this.createUser = function() {
var id = this.generateId();
this.users[id] = new User(id);
return this.users[id];
};
之后,将ID作为参数传递:
this.createUser = function(id) {
this.users[id] = new User(id);
return this.users[id];
};
如果有人有任何建议我会非常感激。谢谢!
答案 0 :(得分:2)
您可以通过以下方式获取user_id:
var user_id = data[0];
所以它是json答案的一部分:可能是字符串或其他字典,这不能是用户对象。您应该尝试通过以下方式更新“if”块中成功函数中的代码:
user = users.createUser(user_id);
//The following line is a non sense for me you put an int inside
//an internal structure of your class that should contain object
//users.users[user_id] = "1";
user.addLocation(latitude, longitude);