javascript - Obj构造函数中的AJAX回调

我有一个名为Location的类对象,可以与Google配合使用,以便对给定地址进行地理编码。
地理编码请求通过AJAX调用进行处理,并通过回调处理,一旦响应到达,回调将启动类成员。

这是代码:

function Location(address) {
    this.geo = new GClientGeocoder();
    this.address = address;
    this.coord = [];

    var geoCallback = function(result) {
        this.coord[0] = result.Placemark[0].Point.coordinates[1];
        this.coord[1] = result.Placemark[0].Point.coordinates[0];
        window.alert("I am in geoCallback() lat: " + this.coord[0] + "; lon: " + this.coord[1]);
    }

    this.geo.getLocations(this.address, bind(this, geoCallback));                   
}
Location.prototype.getAddress = function() { return this.address; }
Location.prototype.getLat = function() { return this.coord[0] }
Location.prototype.getLng = function() { return this.coord[1] }


我的问题是:是否可以在退出构造函数之前等待Google的响应?

我无法控制AJAX请求,因为它是通过Google API发出的。

我想确保一旦创建Location obj后this.coord[]正确初始化。

谢谢!

最佳答案

不,您不能(不应阅读)等待。这就是为什么它首先被称为AJAX(“异步Java语言...”)的原因。 ;)

您可以自己使用回调函数(前面的未经验证的代码)。

function Location(address, readyCallback) {
  this.geo = new GClientGeocoder();
  this.address = address;
  this.coord = [];
  this.onready = readyCallback;

  this.geo.getLocations(this.address, bind(this, function(result) {
    this.coord[0] = result.Placemark[0].Point.coordinates[1];
    this.coord[1] = result.Placemark[0].Point.coordinates[0];
    if (typeof this.onready == "function") this.onready.apply(this);
  }));
}
Location.prototype.getAddress = function() { return this.address; }
Location.prototype.getLat = function() { return this.coord[0] }
Location.prototype.getLng = function() { return this.coord[1] }

// ... later ...

var l = new Location("Googleplex, Mountain View", function() {
  alert(this.getLat());
});

本文翻译自 https://stackoverflow.com/questions/2669362/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 javascript ajax constructor geocoding gdata-api


相关文章:

javascript - 如何在手风琴上创建打开和关闭状态?

javascript - 无法进行AJAXify功能搜索

java - 构造函数是否需要初始化静态变量?

java - 从文件读取到构造函数时出现空白行

javascript - 通过XHR将Blob数据从客户端发送到Node JS服务器

javascript - 在函数内部获取变量

php - 使用Ajax PHP MySQL的用户通知/警报系统

c# - 构造函数或析构函数中调用的虚拟函数的行为

javascript - Vue.JS Vue-Tables Laravel关系

css - Ajax中的OSX Style扩展坞