无法从 MapQuest API 返回的 JSON 中检索值
Posted
技术标签:
【中文标题】无法从 MapQuest API 返回的 JSON 中检索值【英文标题】:Unable to retrieve value from JSON returned by MapQuest API 【发布时间】:2013-11-08 20:33:11 【问题描述】:所以,我不知道为什么这不起作用:
$.getJSON('http://www.mapquestapi.com/geocoding/v1/reverse?key=KEY&callback=renderReverse&json&location=' + lat + ',' + longi, function(geo)
$('#location').html(geo.response.results[0].locations[0].adminArea4);
);
返回的json是:
"results": [
"locations": [
"latLng":
"lng": -1,
"lat": 51
,
"adminArea4": "Hamp",
"adminArea5Type": "City",
"adminArea4Type": "County",
"adminArea5": "Ba and De",
"street": "Teal Crescent",
"adminArea1": "GB",
"adminArea3": "England",
"type": "s",
"displayLatLng":
"lng": -1.145731,
"lat": 51.240441
,
"linkId": 0,
"postalCode": "RG3",
"sideOfStreet": "N",
"dragPoint": false,
"adminArea1Type": "Country",
"geocodeQuality": "ADDRESS",
"geocodeQualityCode": "L1AAA",
"mapUrl": "http://www.mapquestapi.com/staticmap/v4/getmap?key=Fmjtd|luubnu0yn5,7g=o5-9072ur&type=map&size=225,160&pois=purple-1,51.2401563,-1.1463337,0,0|¢er=51,-17&zoom=15&rand=-859825484",
"adminArea3Type": "State"
],
"providedLocation":
"latLng":
"lng": -1.146334,
"lat": 51.240156
],
"options":
"ignoreLatLngInput": false,
"maxResults": -1,
"thumbMaps": true
,
"info":
"copyright":
"text": "© 2013 MapQuest, Inc.",
"imageUrl": "http://api.mqcdn.com/res/mqlogo.gif",
"imageAltText": "© 2013 MapQuest, Inc."
,
"statuscode": 0,
"messages": []
我猜是因为我弄错了geo.response.results
!
我们将不胜感激。
【问题讨论】:
请更改您的问题标题! 你确定$('#location').html(
正在执行吗?我希望这会失败,因为您告诉服务将其作为带有 &callback=renderReverse
的特定回调返回,除非服务忽略它并返回 CORS 标头。
@KevinB :我将 &callback=renderReverse 更改为 &callback=?它现在可以工作了,我从 mapquests 的 api 文档中获取了这个 url,忘记了它是用于 javascript 的!非常感谢!
你正确的凯文,我在答案中放了一个工作示例:)
@GeorgeTaylor 不幸的是,仍然可以在修订历史记录中找到 API 密钥。您可以标记您的问题以引起版主注意并解释这种情况(他们将删除完整的修订版)。
【参考方案1】:
返回的 JSON 中没有 response
键。试试这个:
$.getJSON('http://www.mapquestapi.com/geocoding/v1/reverse?key=KEY&callback=renderReverse&json&location=' + lat + ',' + longi, function(geo)
$('#location').html(geo.results[0].locations[0].adminArea4);
);
【讨论】:
@ComFreek 感谢您的编辑。永远最好隐藏你的 API 密钥,OP。 虽然你的答案是正确的,但如果你运行它,它永远不会成功。我调试了,这是因为 json Request Failed: parsererror, SyntaxError: JSON.parse: unexpected character 中的语法错误 @ComFreek :干杯,你是对的! (感谢 API 密钥隐藏 :))【参考方案2】:虽然上面的答案是正确的,但你的服务返回的 json 似乎也有问题。它包含无效字符,导致您的请求返回错误。
如果你使用了 json 成功和错误信息,你会看到这个
var lat = -1.146334;
var longi = 51.240156;
$.getJSON( 'http://www.mapquestapi.com/geocoding/v1/reverse?key=**YOURKEY**&callback=renderReverse&json&location=' + lat + ',' + longi )
.done(function( json )
console.log( "JSON Data: " + json);
)
.fail(function( jqxhr, textStatus, error )
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
);
问题是因为您在响应中得到了 json p。要解决这个问题,您需要声明 jsonp,以获得正确的 json 对象。
var lat = -1.146334;
var longi = 51.240156;
$.getJSON( 'http://www.mapquestapi.com/geocoding/v1/reverse?key=**YOURKEY**&callback=renderReverse&json&location=' + lat + ',' + longi, format: "jsonp" )
.done(function( geo )
$('#location').html(geo.results[0].locations[0].adminArea4);
)
.fail(function( jqxhr, textStatus, error )
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
);
【讨论】:
以上是关于无法从 MapQuest API 返回的 JSON 中检索值的主要内容,如果未能解决你的问题,请参考以下文章
Mapquest 的 JSON 响应不正确 - Android 应用
使用 MapQuest Directions API 从用户地理位置创建路线