调用百度地图api报错跨域问题 怎么解决

使用百度地图api时 报错

Failed to load resource: net::ERR_BLOCKED_BY_RESPONSE.NotSameOriginAfterDefaultedToSameOriginByCoep
Uncaught ReferenceError: BMapGL is not defined
    at demo.html:25:19

img

1、是否正确引入了百度地图API的脚本文件。可以在HTML页面中添加以下代码:

 <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.0&type=webgl&ak=your_ak"></script>

其中your_ak需要替换为你自己的百度地图API密钥。

2、是否在百度地图API加载完成后才调用相关函数。可以在页面加载完成后再调用相关函数,例如使用window.onload事件:

window.onload = function() {
    // 在这里调用百度地图API相关函数
};


贴一下 你引入的代码 .这个报错应该是没引入成功

这是跨域引起的,跟百度没啥关系;
解决办法,在前端代码中加入跨域设置,另外可以使用代理或者把百度的js下载到本地,从本地加载

该回答引用ChatGPT4与博主@晓码自在合作编写:

根据你的描述和代码,出现这些错误的原因有:

  1. 跨域问题:你的网页域名和百度地图API的域名不同,导致跨域请求被阻止。解决方式是在服务器端设置CORS headers,或者使用JSONP等方式解决跨域。
  2. 没有引入BMapGL对象:你的代码中使用了BMapGL对象,但是没有引入百度地图API,所以会报BMapGL is not defined的错误。
  3. 百度地图API引入位置问题:百度地图API需要在使用之前引入,你的代码中在标签之后才引入,这会导致在解析到BMapGL时还未定义,所以报错。

解决方案:

  1. 跨域问题:在服务器中为百度地图API的域名设置CORS headers,允许你的域名的请求。或者使用JSONP请求百度地图API。

  2. 引入顺序问题:将百度地图API的引入提前到标签中:

html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />  
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>地图</title>  
<script src='https://api.map.baidu.com/api?type=webgl&v=1.0&ak=your_ak'></script>
<style type="text/css">...</style> 
</head>
<body>
...
</body>

  1. 检查ak参数:在引入百度地图API时,ak参数是你的应用密钥,需要替换为你实际的应用密钥。

引入顺序修复和ak参数检查之后,应该可以正常使用百度地图API了。

这是一个网页的 HTML 和 JavaScript 代码,使用了百度地图 API 来显示地图和规划驾车路线。不过代码存在一些问题。

首先,HTML 代码中的第一行声明了一个错误的文档类型。正确的文档类型应该是 ,而不是 。

其次,HTML 代码中的第 8 行 meta 标签中的 content-type 属性值应该为 "text/html; charset=utf-8",而不是 "text/html; charset=utf-8”。这是因为该属性值中的引号使用了中文全角引号,而不是英文半角引号。

第三,JavaScript 代码中第 20 行的 长沙 应该是一个注释,应该使用 // 开头。

最后,JavaScript 代码中第 29 行的 pot4 变量定义后面少了分号,应该在结尾处加上分号。

另外,JavaScript 代码中出现了一个 ERR_BLOCKED_BY_RESPONSE.NotSameOriginAfterDefaultedToSameOriginByCoep 的错误,这是因为浏览器的 CORS 机制导致了跨域请求被阻止。解决这个问题的方法是,在调用百度地图 API 的 JavaScript 文件时,使用正确的链接地址,避免使用被阻止的链接地址。在本例中,可以尝试使用 http://api.map.baidu.com/api?type=webgl&v=1.0&ak=你的AK 这个链接地址来调用 JavaScript 文件,其中 你的AK 应该替换为你自己的百度地图开发者密钥。

除此之外,JavaScript 代码中还存在一个问题,第 26 行的 pot3. 后面似乎少了一个变量名,导致代码无法正常运行。需要检查这行代码,确认变量名是否正确。

综上所述,需要对这段代码进行一些修正和改进,以确保它能够正常运行,并且避免一些潜在的问题。

参考gpt:
报错信息 "Failed to load resource: net::ERR_BLOCKED_BY_RESPONSE.NotSameOriginAfterDefaultedToSameOriginByCoep" 表明由于浏览器的安全策略限制,跨域请求被阻止了。

而报错 "Uncaught ReferenceError: BMapGL is not defined" 则意味着 BMapGL 对象未定义,可能是由于地图 API 的加载问题导致的。

要解决这些问题,您可以尝试以下几个步骤:

  1. 检查域名限制:确保您的应用程序域名与您申请百度地图 API 时提供的域名一致。如果不一致,需要在百度地图开放平台上进行相应的配置。
  2. 跨域请求设置:如果您的应用程序在使用百度地图 API 时进行了跨域请求,需要确保服务器端已经正确设置了跨域请求的响应头。具体设置可3. 以参考相关文档或与后端开发人员进行沟通。
  3. 安全策略设置:某些浏览器的安全策略可能会限制跨域请求。您可以尝试在服务器端设置跨域资源共享(CORS)策略,以允许跨域请求。
    确保地图 API 正确加载:确保地图 API 的引入代码正确,并且位于正确的位置。可以检查网络请求是否成功加载地图 API 脚本文件。

回答申明:包含AI辅助答案参考ChatGPT Plus版

您可以尝试以下几个步骤:

检查API密钥:确保您在使用百度地图API时提供了有效的API密钥,并且已正确配置在您的代码中。

CORS设置:如果您的网页尝试从不同的域加载百度地图API资源,您需要在服务器端设置适当的CORS头来允许跨域访问。请参考百度地图API文档或联系您的服务器管理员以获取更多关于CORS设置的帮助。

加载顺序:确保您在加载百度地图API之前正确加载了相关的JavaScript文件。通常,您需要在HTML文件的标签内添加百度地图API的引用代码,并确保在使用BMapGL变量之前已加载了百度地图API。
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/174092
  • 你也可以参考下这篇文章:百度地图api调用 实现车载导航功能
  • 除此之外, 这篇博客: 百度地图api 点击标注后跳转页面中的 百度地图api 点击标注跳转页面 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 初始化地图

    window.onload = function(){
    	//得到所有点,包括点的id、经纬度、跳转地址链接
    	//jd、 wd、href
    	getPoints();
    	//初始化地图
        initMap();
    }
    
    var dList = new Array();
    
    function getPoints(){
    	jQuery.ajax({
    		  type: "POST",
    	      dataType: "json",
    	      async:false,
    	      url: "/getAll.html",
    	      data:{},
    	      success: function(data){
    			  dList= data;
    	      }
    	})
    }
    function initMap(){
    	//遍历点集合dList,向地图中添加标注
    	for(var i=0;i<dList.length;i++){
    			var oned = dList[i];
    			var point = new BMap.Point(oned .jd,oned .wd);
    			var marker = new BMap.Marker(point);
    			//添加点击事件
    			addClickHandler(marker,oned );
    			// 将标注添加到地图中	
    			map.addOverlay(marker);
    		}
    }
    //点击后打开新页面,地址为这个点的地址
    function addClickHandler(marker,point){
    	marker.addEventListener("click",function(){
    		window.open(encodeURI(point.href),'_blank');
    	});
    }
    
  • 您还可以看一下 郭孟涛老师的微信客户端登录网页api接口开发课程中的 01 微信客户端网页登录api开发课程演示和介绍小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对百度地图API出现的跨域问题报错,可以通过以下几个步骤来解决:

    1. 了解前端跨域问题的原因及解决方案。 前端跨域问题主要是由于浏览器的同源策略所引起的,可以通过设置跨域资源共享(CORS)或者JSONP等方式来解决。

    2. 针对百度地图API的跨域问题,可以使用CORS或者JSONP的方式来解决。

    3. CORS:需要在服务器端进行设置来允许跨域请求,可以在请求头中设置Access-Control-Allow-Origin字段,并指定允许跨域的域名。
    4. JSONP:通过在script标签中设置src属性,并指定callback函数来进行跨域请求。

    5. 根据具体的代码实现来选择合适的解决方案。 在以上参考资料中,并没有直接涉及到跨域问题的代码,因此具体解决方案需要根据实际代码实现来进行选择。如果可以直接在服务器端进行设置,那么选择CORS可能更加简单方便;如果代码中需要使用到JSONP,那么需要在实现的过程中进行相关设置。

    6. 学习更多关于跨域问题的知识和解决方案。 跨域问题是前端开发中非常常见、也比较复杂的一个问题,需要继续深入学习和实践来掌握更多的解决方案和技术。可以通过学习网络协议、HTTP头、浏览器同源策略等相关知识,来更好地理解和解决跨域问题。

把代码发出来,方便调试看一下问题。

盲猜你是直接浏览的本地页面file://,放web服务器上浏览试试http://

这个错误通常是由于浏览器的安全策略导致的。浏览器会阻止加载来自不同源的资源,以防止跨站点脚本攻击(XSS)和其他安全问题。

ERR_BLOCKED_BY_RESPONSE.NotOriginAfterDefaultedToSameOriginByCoep错误表示浏览器在尝试加载资源时遇到了跨域问题。这可能是因为您的代码试从不同的域加载资源,而浏览器不允许这样做。

Uncaught ReferenceError: BMapGL is not defined错误表示您的代码尝试访问未定义的变量或对象。在这种情况下,您的代码尝试访问名为BMapGL的对象,但该对象未被定义或加载。

要解决这些错误,您可以尝试以下几个步骤:

  1. 确保您的代码和资源来自同一个域。如果您的代码和资源来自不同的域,请确保您的服务器配置了跨域资源共享(CORS)策略,以允许跨域访问。
  2. 确保您的代码正确加载了所需的库和依项。在这种情况下,您需要确保BMapGL对象已正确加载。您可以检查您的代码中是否存在任何拼写错误或语法错误,并确保您正确地引用了所需的库和赖项。
  3. 如果您使用的是第三方库或框架,请确保您已正确配置和初始化它们。在这种情况下,您需要确保您已正确初始化百度地图库,并正确引用了它们的API。您可以查看百度地图API文档以更多信息。

如果您仍然无法解决这些错误,请尝试在浏览器的开发者工具中查看更多详细信息,便更好地了解问题所在。