gpt4 book ai didi

jquery - 等不及从 google API 返回结果

转载 作者:行者123 更新时间:2023-12-01 07:17:02 25 4
gpt4 key购买 nike

我有两个函数:getCooperative()和getDistance(),都需要向google apis发出异步请求,结果是一个json文件,

获取距离:

function getDistance(origin,destination,mode)
{
var url="http://maps.googleapis.com/maps/api/distancematrix/json?";

var origin="origins="+origin;
var destination="&destinations="+destination;
var mode="&mode="+mode;
var language="&language=fr-FR"
var sensor="&sensor=false";

var def = new jQuery.Deferred();
var city;
$.getJSON(url+origin+destination+mode+language+sensor,function(json)
{
if (json.status=="OK")
{
var distance=json.rows[0].elements[0].distance.value;
}
def.resolve(distance);
});
return def.promise();
}

这是获取坐标:

function getCoordinate(address)
{

var url="http://maps.googleapis.com/maps/api/geocode/json?address=";
var sensor="&sensor=false";
var def = new jQuery.Deferred();
var city;
$.getJSON(url+address+sensor,function(json)
{
var lat=json.results[0].geometry.location.lat;
var lng=json.results[0].geometry.location.lng;
var dist=google.maps.geometry.spherical.computeDistanceBetween(myCenter,new google.maps.LatLng(lat,lng));
console.log('address:'+dist/1000+'km');
var coord=[lat,lng];
def.resolve(coord);

});
return def.promise();
}

我需要在 getDistance() 中使用 getCooperative() 方法的结果,但由于异步模式 getDistance 指令是在结果从 google 返回之前执行的。

   for (i=0;i<addresses.length;i++)
{
$.when(getCoordinate(addresses[i])).then(function (coord) {
var myLatitude=coord[0];
var myLongitude=coord[1];
addressList[j++]=[coord[0],coord[1]];
$.when(getDistance(lat+","+lng,myLatitude+","+myLongitude,"driving")).then(function(distance)
{
var test=i;
var distTab=[];
switch(i){
case 0:
//do Something
break;

default:
//do something
break;
}
}
});

});
} console.log("the dist:"+distance);
console.log("coordinate:"+myLatitude+","+myLongitude);
console.log("Center:"+lat+","+lng);

最佳答案

由于您已经在使用“google.maps”,因此将所有纬度/经度值作为“google.maps.LatLng”对象传递是有优势的。

此外,变量仅在作用域内且仅在异步回调中分配一次时才可寻址,因此您对 console.log() 的一些尝试必然会失败。

应用这些原则并进行整理(显着),我得到:

function getDistance(origin, destination, mode) {
//Note: //origin, destination are now google.maps.LatLng objects
var url = "http://maps.googleapis.com/maps/api/distancematrix/json";
var data = {
origin: origin.toUrlValue(),
destination: destination.toUrlValue(),
mode: mode,
language: "fr-FR",
sensor: "false"
};
return $.getJSON(url, data).then(function(json) {
if(json.status=="OK") {
return json.rows[0].elements[0].distance.value;
}
else return $.Deferred().reject().promise();
});
}

function getCoordinate(address) {
var url="http://maps.googleapis.com/maps/api/geocode/json";
var data = {
address: address,
sensor: "false"
};
return $.getJSON(url, data).then(function(json) {
if(json.results && json.results.length && json.results[0].geometry) {
var latLng = new google.maps.LatLng(
json.results[0].geometry.location.lat,
json.results[0].geometry.location.lng
);
console.log("Center: " + latLng.toString());
return latLng;
}
});
}

for (i=0; i<addresses.length; i++) {
getCoordinate(addresses[i]).then(function(latLng) {
console.log("coordinate: " + latLng.toString());
addressList[j++] = latLng;//now a google.maps.LatLng object
getDistance(myOrigin, latLng, "driving").then(function(distance) {
console.log("the dist:" + distance);
switch(i) {
case 0: /* do Something */ break;
default: /* do something */ break;
}
});
});
}

未经测试

当然,这不能直接开箱即用,因为您的代码的其余部分需要进行调整才能与 google.maps.LatLng 对象一起使用,特别是我调用的变量myOrigin(以前在某些外部范围内为 latlng)以及 addressList 中的那些。

关于jquery - 等不及从 google API 返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845100/

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