Javascript 尝试使用jQuery编辑脚本src属性时出错
,但我不是硬编码API密钥,而是尝试从我创建的API获取它。Javascript 尝试使用jQuery编辑脚本src属性时出错,javascript,jquery,html,google-maps,Javascript,Jquery,Html,Google Maps,,但我不是硬编码API密钥,而是尝试从我创建的API获取它。 所以,我创建了这个HTML文件。密钥已正确获取,但当我试图在运行时设置脚本的src属性(以便我可以将自己的密钥添加到URI中)时,它根本不会被添加 这是我的HTML <!DOCTYPE html> <html> <head> <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity
所以,我创建了这个HTML文件。密钥已正确获取,但当我试图在运行时设置脚本的
src
属性(以便我可以将自己的密钥添加到URI中)时,它根本不会被添加
这是我的HTML
<!DOCTYPE html>
<html>
<head>
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Simple markers example</title>
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
height: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
function initMap() {
var myLatLng = {lat: -25.363, lng: 131.044};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: myLatLng
});
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: 'Hello World!'
});
}
</script>
<script async defer>
$.get( "maps_api_key", function( data ) {
const API_KEY = String(data)
console.log("API_KEY: " + API_KEY)
var uri = "https://maps.googleapis.com/maps/api/js?key=" + API_KEY + "&callback=initMap"
console.log("URI is: " + uri)
$("#maps_fetcher").attr("src", uri)
});
</script>
<script id="maps_fetcher" async defer
src="https://maps.googleapis.com/maps/api/js?key=API_KEY&callback=initMap">
console.log("Map fetcher")
</script>
</body>
</html>
简单标记示例
html,正文{
身高:100%;
保证金:0;
填充:0;
}
#地图{
身高:100%;
}
函数initMap(){
var Mylatng={lat:-25.363,液化天然气:131.044};
var map=new google.maps.map(document.getElementById('map'){
缩放:4,
中心:myLatLng
});
var marker=new google.maps.marker({
职位:myLatLng,
地图:地图,
标题:“你好,世界!”
});
}
$.get(“映射\ api \键”,函数(数据){
常量API_KEY=字符串(数据)
日志(“API_键:+API_键”)
var uri=”https://maps.googleapis.com/maps/api/js?key=“+API_KEY+”&callback=initMap”
log(“URI是:”+URI)
$(“#maps_fetcher”).attr(“src”,uri)
});
log(“地图获取程序”)
console.log(“Map fetcher”)
上的行也从未打印过。值得一提的是,我通过Node和Express提供HTML 你知道这里会发生什么吗?
提前感谢
console.log(“地图获取程序”)
不起作用,因为
元素应该包含src
或内联内容,但不能同时包含这两种内容。maps\u fetcher
可能正在加载硬编码的URL,因为您的其他脚本在Ajax响应返回之前不会更改它。您能否删除整个maps\u fetcher
脚本,并从Ajax响应处理程序中以编程方式附加它?(顺便说一句,您知道以这种方式传递API_密钥实际上并不会阻止最终用户发现它是什么?)很好,谢谢。我删除了它,我在控制台上得到这个:1<代码>地图获取程序2<代码>标记。html:44 API_键:…3markers.html:46 URI为:…
,因此文件中的最后一个脚本的计算太早。async defer
脚本不应该按顺序执行吗?即使这两个脚本按顺序执行,第一个脚本也会启动一个异步Ajax请求,也就是说,它不会等待响应。Ajax回调会在收到响应后运行。非常感谢@nnnnnn您的评论真的很有帮助。如果你想和他们一起创建一个答案,我会批准的。顺便说一句:我并不介意API是否可以看到,我只是不想把它添加到VCS可见文件中