Uncaught TypeError: У объекта нет метода ... Javascript - PullRequest
0 голосов
/ 31 января 2012

У меня проблема с сообщением об ошибке ...

"Uncaught TypeError: Объект f771b328ab06 не имеет метода addLocation" *

Я действительно не уверен, что вызывает это.'f771b328ab06' - это идентификатор пользователя в ошибке.Я могу добавить нового пользователя и предотвратить дублирование пользователей, но когда я пытаюсь добавить их местоположение в список, я получаю эту ошибку.

Кто-нибудь видит, что происходит не так?Ошибка также возникает в операторе else функции инициализации (если идентификатор пользователя существует, просто добавьте местоположение и не создавайте нового пользователя).У меня есть некоторые примечания в коде, и я почти уверен, что это отчасти связано с тем, как я изменил пример, предоставленный другим пользователем.

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);

Поскольку я получаю идентификатор с телефона и выполняюне нужно генерировать его здесь (только получать), я закомментировал часть, которая создает случайный идентификатор.При этом мне пришлось добавить параметр в метод createUser в Users(), чтобы я мог передать идентификатор в качестве аргумента из Initialize().См. Изменения в createUser ниже:

До, с сгенерированным идентификатором (часть, где генерируется число, находится в приведенном выше блоке кода с комментариями):

this.createUser = function() {
    var id = this.generateId();
    this.users[id] = new User(id);
    return this.users[id];
};

После,с идентификатором, переданным в качестве аргумента:

this.createUser = function(id) { 
    this.users[id] = new User(id);
    return this.users[id];
};

Если у кого-то есть какие-либо предложения, я был бы очень признателен.Спасибо!

1 Ответ

2 голосов
/ 31 января 2012

Здесь вы получаете 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...