私はキャッチされない例外TypeError:オブジェクトが方法はありません... Javascriptを
"Uncaught TypeError: Object f771b328ab06 has no method '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を作成し、一部をコメントアウト。これを行うにあたり、私はInitialize()
から引数としてIDを渡すことができるように、Users()
の中のcreateUser
メソッドにパラメータを追加しなければなりませんでした。以下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];
};
誰かが何か提案があれば、本当に感謝しています。ありがとう!だから、JSONの答えの一部だ
var user_id = data[0];
:
まあ、私はちょうど複製されるからIDを防止するためのキーを検索できるようにしたかった:あなたは「もし」ブロックによって内部であなたの成功の機能で、あなたのコードを更新するようにしてください。そこに「1」をプレースホルダとして配置します。これを行うより良い方法はありますか? – mkyong
私はそれを考え出した。私はif文でユーザを定義していませんでした。おっとっと。私は 'users.users [user_id] =" 1 ";'セクションをコメントアウトしたところ、うまくいきました。洞察に感謝します。 – mkyong
新しいチェックアウトのFirebugなら、実際にコードをデバッグするのに役立つかもしれません。 – AsTeR