我是OOP的新手,我尝试使用ajax请求构建对象。我需要的是以JSON格式获取'responseArray'而不是使用它。
function adres(adres) {
this.adres_string = adres;
var self = this
$.ajax({
type: 'POST',
url: "http://nominatim.openstreetmap.org/search?q="+adres+"&format=json&polygon=0&addressdetails=0",
success: function(data) {
self.responseArray = eval('(' + data + ')')
}
})
//Method returning point coordinates in EPSG:4326 system
this.getLonLat = function() {
var lonlat = new OpenLayers.LonLat(this.responseArray.lon, this.responseArray.lat);
return lonlat;
}
}
问题在我写的appilcation代码中开始:
var adr = new adres('Zimna 3, Warszawa');
adr.getLonLat();
由于没有时间从服务器获取响应,因此不返回任何内容。 如何以最佳方式正确编写?我已经阅读了jQuery中的when()。then()方法。这对我来说可能没问题。我只是想知道最佳实践
答案 0 :(得分:1)
这就是AJAX的工作原理(注意 A - 同步部分)。你是对的,你打电话adr.getLonLat()
回复的那一刻还没有回来。这是我建议的设计:只需将回调函数引用传递给adres
构造函数:
function adres(adres, callbackFun) {
//...
success: function(data) {
var responseArray = eval('(' + data + ')')
var lonlat = new OpenLayers.LonLat(responseArray[i].lon, responseArray[i].lat);
callbackFun(lonlat)
}
并将其称为:
adres('Zimna 3, Warszawa', function(lonlat) {
//...
})
几点评论:
adres
现在基本上是一个函数,你不需要这里的对象。
不要使用eval
来解析JSON,请使用JSON
对象。
您确定可以发布到http://nominatim.openstreetmap.org
吗?您可能会遇到相同的原始政策问题
来自i
的{{1}}变量在哪里?