问题描述
我正在尝试从API调用中提取经度/纬度到Google Maps。我正在使用的代码如下:
var text gMaps = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & URLEncode(SearchAndReplace([Related Staff - Address]," ","+")) & "&key=xxxxxxxxxxxxxxxxxxxx";
var text lat = URLRoot() & "db/" & Dbid() & "?act=API_EditRecord" & "&rid=" & [Record ID#] & "&apptoken=xxxxxxxxxxxxx" & "&_fid_113=";
"javascript: {" &
"$.get('" & $gMaps & "',function(data,success) {" &
"console.log(data);" &
"var geo = data.getElementsByTagName('geometry')[0].getAttribute('lat');" &
"console.log(geo);" &
"$.get('" & $lat & "'+geo);" &
"window.location.reload();" &
"});" &
"}"
这是quickbase中的一个按钮,用于将信息放入2个字段。上面的示例目前仅涉及纬度。这段代码给了我空结果,我对javascript很熟悉,但是仍然需要大量学习。
这是我要从中获取的xml响应。
感谢您提供的任何帮助。
Dana
解决方法
您可以使用Javascript的DOMParser和XPath功能从XML字符串中提取lat
和lng
:
let xmlString = `
<GeocodeResponse>
<status>OK</status>
<result>
<type>sample</type>
<name>Sample XML</name>
<location>
<lat>37.4217550</lat>
<lng>-122.0846330</lng>
</location>
</result>
<result>
<message>The secret message</message>
</result>
</GeocodeResponse>
`
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString,"text/xml"); //important to use "text/xml"
var nsResolver = xmlDoc.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);
var lat = xmlDoc.evaluate('//lat',xmlDoc,nsResolver,XPathResult.STRING_TYPE,null ).stringValue;
var lng = xmlDoc.evaluate('//lng',null ).stringValue;
console.log(lat,lng) // 37.4217550 -122.0846330
另请参见Parse XML file with JavaScript and plot on Google Maps
,您似乎没有完成lat查询字符串变量。您的变量最终是“ yourdomain.quickbase.com/db/yourdbid?act=API_EditRecord&apptoken=&rid=&_fid_113=“,因此fid 113实际上从未分配任何值。即使您正在下面运行JavaScript,也没有告诉它要分配给fid 113的位置。此外,将JavaScript注入很快在Quick Base中成为过去已经不值一提了,所以这可能是您想要的而是放入代码页,这反而会更容易,因为这样您就可以使用Google Maps API提供的地址解析器对象。
,我建议使用Quick Base内的“代码页”代替此解决方案的公式字段。使用代码页,您可以进入XML解析器库以处理响应,然后使用纬度和经度值对Quick Base进行下一个API调用。那将是最佳做法。