Javascript 使用AJAX设置对象属性
我是OOP的新手,我尝试使用ajax请求构建一个对象。我需要的是获得JSON格式的“responseArray”,然后再进行处理Javascript 使用AJAX设置对象属性,javascript,ajax,oop,jquery,Javascript,Ajax,Oop,Jquery,我是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&polygo
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;
}
}
当我在应用程序代码中写入以下内容时,问题开始出现:
var adr = new adres('Zimna 3, Warszawa');
adr.getLonLat();
这不会返回任何内容,因为没有时间从服务器获取响应。
如何以最好的方式正确书写?我已经阅读了jQuery中的when().then()方法。这对我来说可能没问题。我只是想了解一下最佳实践这就是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
- 不要使用
解析JSON,请使用eval
objectJSON
- 您确定可以发布到
?您可能会遇到同一原产地政策问题http://nominatim.openstreetmap.org
中的responseArray[i]
变量在哪里i
adres.create(函数(newInstance){…})
。不漂亮,但很管用。