$.getScript
也无法正常工作。
我们如何为下面的代码编写jquery.getscript?我无法在脚本中加载我的网址,因为如果移动设备没有互联网我的应用程序没有启动,所以如果互联网连接可用,我想要包含我的网址。有谁可以请更正我的代码?
if (states[networkState] == 'No network connection') {
// Device with no network data connection
document.getElementById("location").innerHTML = "Location unavailable";
} else {
// code for getting current address using Lat/Longs
$.getScript("https://maps.googleapis.com/maps/api/js?sensor=true", function () {
var geocoder;
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(latitude, longitude);
geocoder.geocode({
'latLng': latlng
}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
var add = results[0].formatted_address;
document.getElementById("location").innerHTML = "Location : " + add;
} else {
document.getElementById("location").innerHTML = "No Results found ";
}
} else {
//document.getElementById("location").innerHTML="Geocoder failed due to: " + status;
alert("Geocoder failed due to: " + status);
}
});
});
}
答案 0 :(得分:1)
实际上底部的东西不起作用。谷歌很聪明......响应又回来了,但它们更聪明甚至......如果你看看他们的API文档,你会发现它们允许你在你的请求中指定一个回调。所以你会这样做:
jQuery('body').append('<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&callback=address"/>')
请注意对callback=address
故事的寓意是阅读API文档:D
它失败了,因为还没有定义某些东西。但是如果你查看返回的脚本,你会看到它是从https://maps.gstatic.com/intl/en_us/mapfiles/api-3/15/4/main.js动态创建一个脚本标签(是的另一个)。
你可以:
在您的$.getScript()
回调中加载该脚本,然后在回调中加载您的地址函数。
由于上面的URL可能是动态生成的,因此您可能希望使用正则表达式来解析第一个getScript响应,然后从该响应中拉出URL以进行回调。您应该考虑在此使用$.ajax
而不是$.getScript
,这样您就可以使用cache
结果,否则它将使用随机数每次都重新请求新脚本。
或者您可以考虑在回调中使用计时器来查找是否存在新变量或对象,以确定它是否已完成加载(无论之前是否失败)