gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:40:22 25 4
gpt4 key购买 nike

我有一个名为 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 发出的。

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

谢谢!

最佳答案

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

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

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());
});

关于javascript - Obj 构造函数中的 AJAX 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2669362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com