我在JS中遇到了一些问题,我刚刚接受了。
我已经定义了一个对象,并在其中进行.getJSON()调用,但我似乎无法正确引用调用对象的属性:
// Vehicle object
function vehicle(id) {
this.id = id;
var that = this;
// Fetch some JSON
$.getJSON("json.php?act=vehicleInfo&id=" + this.id, function (json) {
that.vehicleInfo = json
that.icon = L.AwesomeMarkers.icon({ icon: that.vehicleInfo.icon, color: that.vehicleInfo.colour });
that.polyline = new L.Polyline([[that.vehicleInfo.latitude, that.vehicleInfo.longitude]]);
that.marker = L.marker([that.vehicleInfo.latitude, that.vehicleInfo.longitude], {icon: that.icon});
that.marker.bindPopup("Test point");
that.marker.addTo(map);
that.polyline.addTo(map);
});
}
// Vehicle move method
vehicle.prototype.move = function(latlng){
this.marker.setLatLng(latlng);
this.polyline.addLatLng(latlng);
}
当我调用.move()时,this.marker未定义。我在哪里错了?
答案 0 :(得分:6)
不幸的是,Ajax并不是这样的。您无法在任何特定时间甚至根本不依赖$.getJSON
回调。一种可能性是使请求同步,但这是不推荐,因为它会锁定浏览器。
唯一可行的解决方案是:
这是因为.move
调用而必须为车辆调用$.getJSON
的任何代码。不过,你可以让它看起来更优雅:
this.jqxhr = $.getJSON(...
/* snip */
vehicle.prototype.move = function (latlng) {
var veh = this;
this.jqxhr.done(function () {
veh.marker.setLatLng(latlng);
veh.polyline.setLatLng(latlng);
});
}