Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用jQuery编辑脚本src属性时出错_Javascript_Jquery_Html_Google Maps - Fatal编程技术网

Javascript 尝试使用jQuery编辑脚本src属性时出错

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

,但我不是硬编码API密钥,而是尝试从我创建的API获取它。
所以,我创建了这个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_键:…3
markers.html:46 URI为:…
,因此文件中的最后一个脚本的计算太早。
async defer
脚本不应该按顺序执行吗?即使这两个脚本按顺序执行,第一个脚本也会启动一个异步Ajax请求,也就是说,它不会等待响应。Ajax回调会在收到响应后运行。非常感谢@nnnnnn您的评论真的很有帮助。如果你想和他们一起创建一个答案,我会批准的。顺便说一句:我并不介意API是否可以看到,我只是不想把它添加到VCS可见文件中