Javascript 使用谷歌地图距离矩阵API获取两个地址之间的旅行时间
我正在建立一个例行程序,以获得两个地点之间的旅行时间使用 他们页面中的示例: 如果介于华盛顿特区Javascript 使用谷歌地图距离矩阵API获取两个地址之间的旅行时间,javascript,google-maps,reactjs,google-maps-api-3,react-native,Javascript,Google Maps,Reactjs,Google Maps Api 3,React Native,我正在建立一个例行程序,以获得两个地点之间的旅行时间使用 他们页面中的示例: 如果介于华盛顿特区和纽约市之间,则请求应如下所示: constructor(props) { // .. getDistance(); } “我的API密钥在这里” 如果我在chrome中像任何https调用一样调用上述内容,使用API密钥,它就可以正常工作 但是,当我使用任何其他地址时,我总是在我的应用程序中得到INAVLID\U请求,但在chrome中工作良好 : 无效的_请求:提供的请求无效。
和纽约市之间,则请求应如下所示:
constructor(props) {
// ..
getDistance();
}
“我的API密钥在这里”
如果我在chrome中像任何https调用一样调用上述内容,使用API密钥,它就可以正常工作
但是,当我使用任何其他地址时,我总是在我的应用程序中得到INAVLID\U请求,但在chrome中工作良好
:
无效的_请求:提供的请求无效。这通常是由于缺少必填字段造成的。请参阅上面的“支持字段列表”
我的用法:
export async function getDistance()
{
// get location of base
const BaseLocation = "555 E Lafayette St, Detroit, MI 48226";
// get locations of targets
const TargetLocation = "21000 W 10 Mile Rd, Southfield, MI 48075";
// prepare final API call
let ApiURL = "https://maps.googleapis.com/maps/api/distancematrix/json?";
let params = `origins=${BaseLocation}&destinations=${TargetLocation}&key=${GOOGLE_DISTANCES_API_KEY}`;
let finalApiURL = `${ApiURL}${encodeURI(params)}`;
console.log("finalApiURL:\n");
console.log(finalApiURL);
// get duration/distance from base to each target
try {
let response = await fetch(ApiURL);
let responseJson = await response.json();
console.log("responseJson:\n");
console.log(responseJson);
} catch(error) {
console.error(error);
}
}
我从另一个类似这样的文件中调用它:
constructor(props) {
// ..
getDistance();
}
控制台中的结果(不工作-无效的\u请求):
如果我复制并粘贴finalApiURL
并在Chrome中使用它,它就可以正常工作。结果:
{
"destination_addresses" : [ "21000 W 10 Mile Rd, Southfield, MI 48075, USA" ],
"origin_addresses" : [ "555 E Lafayette St, Detroit, MI 48226, USA" ],
"rows" : [{
"elements" : [{
"distance" : {
"text" : "28.1 km",
"value" : 28073},
"duration" : {
"text" : "23 mins",
"value" : 1367},
"status" : "OK"}]}],
"status" : "OK"
}
有什么问题吗?请并感谢这只是一个打字错误,下面是正确的一行:
let response = await fetch(finalApiURL);
不是apirl
,这个没有参数,因此无效,正如文档所说;) 我希望这能奏效。如果你没有等待支持,你可以试试这个
setTimeout(() => {
let response = await fetch(finalApiURL);
});
例如,如果使用curl
访问该URL,是否也会出现相同的错误?我用自己的钥匙尝试了curl-I$finalApiURL
,它对我很有效。很抱歉,我可能误读了一些内容(或者可能是在您编辑之前…不重要)。如果您将该URL粘贴到Chromes的地址栏,并且它可以工作,那么您就不需要使用curl
(它只是一个命令行工具)进行测试。您与复制有一个共同点:您是从非浏览器程序访问API,但这不应该有什么区别。嗯…@HuguesMoreau是的,对不起,我想我在你的评论后添加了重复的部分。这确实很奇怪,我编辑并添加了我的确切用法,也许可以看看?async/wait与此有关吗?哈哈哈:我感觉有点不舒服。谢谢你,巴德!