同步和异步概念(由DZW前端框架引发的百度地图api无法加载问题总结)
首先概念:
在计算机领域,同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
最后采用异步调用,才实现地图在弹出框的加载。但绑定的事件不起作用,艰难啊,小后端碰到前端难题。。。
贴代码留念下
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/commons/include.inc.jsp"%>
<!-- -->
<script type="text/javascript">
function loadMapJs() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://api.map.baidu.com/api?v=2.0&ak=XsM2qRL2DI8AXpGpBzzsfzAnzx1upYPT&callback=init";//中间的访问码ak改成公司的
document.body.appendChild(script);
}
function init() {
initMap();//创建和初始化地图
createSearch();
createAutocomlete();
$("#s_p_search_btn").click(function () {
searchPlace($("#searchplace").val());
});
}
$(document).ready(function () {
loadMapJs();//异步加载地图
//console.log("123");
//createAutocomlete();
//setCity();
}); function initMap(){
createMap();//创建地图
setMapEvent();//设置地图事件
}
//创建地图函数:
function createMap(){
var map = new BMap.Map("BaiduDitu");//在百度地图容器中创建一个地图
map.centerAndZoom('广州',11);//设定地图的中心点和坐标并将地图显示在地图容器中
window.map = map;//将map变量存储在全局
}
//地图事件设置函数:
function setMapEvent(){
map.enableDragging();//启用地图拖拽事件,默认启用(可不写)
map.enableScrollWheelZoom();//启用地图滚轮放大缩小
map.enableDoubleClickZoom();//启用鼠标双击放大,默认启用(可不写)
map.enableKeyboard();//启用键盘上下左右键移动地图
}
/* $(function(){
initMap();//创建和初始化地图
createSearch();
createAutocomlete();
$("#s_p_search_btn").click(function () {
searchPlace($("#searchplace").val());
});
}); */
function createSearch() {
var map = window.map;
var local = new BMap.LocalSearch(map,
{
renderOptions: { map: map, panel: "searchlist" }
});
window.local = local;
}
//搜索
function searchPlace(value) {
window.local.search(value);
}
function createAutocomlete() {
var map = window.map;
console.log("addr:");
var ac = new BMap.Autocomplete( //建立一个自动完成的对象
{
"input": "searchplace",
"location": map
});
ac.addEventListener("onconfirm", function (e) { //鼠标点击下拉列表后的事件
var _value = e.item.value;
var addr =_value.business+ _value.province + _value.city + _value.district + _value.street + _value.streetNumber ;
searchPlace(addr);
//$("#searchplace").val(addr); }); }
//地址解析并带回
function setReturnPlace(){
var locationName=$('#addr_del').val();
if(locationName!=null){
$('#addr_del').val('地址解析中...');
var myGeo = new BMap.Geocoder();
myGeo.getPoint(locationName, function(point){
if (point) {
console.log("经度:"+point.lng);
console.log("纬度:"+point.lat);
if (confirm("确定是这个地址吗?\r "+locationName+"\r 经度:"+point.lng+"\r 纬度:"+point.lat)) {
window.location.href="javascript:$.bringBack({place:'"+locationName+"',lng:'"+point.lng+"',lat:'"+point.lat+"'})";
$('#addr_del').val('');
} else{
window.location.href ="javascript:void(0);"
$('#addr_del').val('');
}
} else{
console.log("地图经纬度解析失败");
$('#addr_del').val("地图经纬度解析失败!请查找后输入准确的地址。");
}
},"");
}else{
//提示为空
$('#addr_del').val("您的输入为空!");
window.location.href ="javascript:void(0);"
} return false;
}
</script>
<div id="cc" class="easyui-layout" data-options="fit:true">
<div data-options="region:'west'" style="width:400px;">
<div style="margin-bottom:10px;">
<input id="addr_del" style="width: 380px;" placeholder="请输入百度地图上的准确地址" />
<a id="set_place" href="javascript:void(0);" class="easyui-linkbutton" style="width:63px;" data-options="iconCls:'icon-add'" onclick="setReturnPlace()">确认</a>
<label for="map_search">地图搜索:</label>
<input id="searchplace" name="map_search" style="width: 380px;" class="easyui-textbox-simple" placeholder="输入搜索关键字" />
<a id="s_p_search_btn" href="javascript:void(0);" class="easyui-linkbutton" style="width: 63px;" data-options="iconCls:'icon-search'" >搜索</a>
</div>
<div id="searchlist" style="width: 350px; height: 360px; margin-right:10px; float:left;"></div>
</div>
<div data-options="region:'center'" style="padding:5px;background:#eee;">
<div style="width:520px;height:540px;border:none; float:left;" id="BaiduDitu"></div>
<div style="clear:both;"></div>
</div>
</div>
虽然功能勉强实现了,但这样子的ui及前端我自己都受不了。没办法,前后端都要写,难。先搞定后端吧,前面的有空再搞,毕竟我只是个后端的。
将代码精简后得到:
<script type="text/javascript">
$(document).ready(function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://api.map.baidu.com/api?v=2.0&ak=XsM2qRL2DI8AXpGpBzzsfzAnzx1upYPT&callback=init";//中间的访问码ak改成公司的
document.body.appendChild(script);
});
function init() {
var map = new BMap.Map("BaiduDitu");//在百度地图容器中创建一个地图
map.centerAndZoom('广州',11);//设定地图的中心点和坐标并将地图显示在地图容器中
window.map = map;//将map变量存储在全局
}
</script>
</head>
<body>
<div id="BaiduDitu" style="width:100px;height:100px;"></div>
</body>
</html>
缩减后发现更清晰了,利用createElement() 方法可创建元素节点。此方法可返回一个 Element 对象。动态添加。
既然存在 document 对象,就可以把变量存放到document中使其成为全局变量。
每个载入浏览器的 HTML 文档都会成为 Document 对象。
Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
同步和异步概念(由DZW前端框架引发的百度地图api无法加载问题总结)的更多相关文章
- MUI框架-13-使用百度地图 API(图文教程)
MUI框架-13-使用百度地图 API(图文教程) 后面有实例,转载请注明出处 一.申请百度地图权限 1.打开 百度地图开放平台:http://lbsyun.baidu.com/apiconsole/ ...
- 前端切图:调用百度地图API
原型图 图片发自简书App <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- web前端页面中异步使用百度地图API
<div id="allmap"></div> //百度地图API功能 function loadJScript() { var script = docu ...
- 当react框架遇上百度地图
百度地图官方文档的使用指导是这样说的:在页面中引入<script type="text/javascript" src="http://api.map.baid ...
- Google官方网络框架-Volley的使用解析Json以及加载网络图片方法
Google官方网络框架-Volley的使用解析Json以及加载网络图片方法 Volley是什么? Google I/O 大会上,Google 推出 Volley的一个网络框架 Volley适合什么场 ...
- 【react】当react框架遇上百度地图
百度地图官方文档的使用指导是这样说的:在页面中引入<script type="text/javascript" src="http://api.map.baid ...
- PHP-Socket-阻塞与非阻塞,同步与异步概念的理解
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没 ...
- javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之一 基础Struts框架搭建篇
即将开始着手写这个项目,所以希望通过这篇博客来记录自己学习的过程 今天开学第一天,就上了软件工程实践课,自己也开始着手做这个大作业了.首先我的项目名称叫做智能班车管理系统. 项目的概况: 该软件产品是 ...
- Web前端性能优化——如何有效提升静态文件的加载速度
WeTest 导读 此文总结了笔者在Web静态资源方面的一些优化经验. 一.如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标.那么为了提高页 ...
随机推荐
- 自动化测试基础篇--Selenium Xpath定位
摘自https://www.cnblogs.com/sanzangTst/p/7458056.html 学习 什么是xpath? XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言 ...
- c# 设置MdiClient窗体的背景图片
在窗体的InitializeComponent();方法后面添加下面的代码. MdiClient MC = new MdiClient(); MC.Name = "MdiClientForm ...
- LeetCode算法题-Power Of Two(Java实现)
这是悦乐书的第194次更新,第200篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第56题(顺位题号是231).给定一个整数,写一个函数来确定它是否是2的幂.例如: 输入 ...
- spring cloud 微服务日志跟踪 sleuth logback elk 整合
看过我之前的文章的就可以一步一步搭建起日志传输到搜索引擎 不知道的 看下之前的文章 (1) 记一次logback传输日志到logstash根据自定义设置动态创建ElasticSearch索引 (2)关 ...
- win21api、win32gui、win32con三个模块操作系统窗口时一些小技巧
下面这段脚本是操作一个浏览器上弹窗,打开文件窗口,由于脚本 执行速度快,当时未添加第2行的延时时,脚本顺利的执行成功,但弹的窗却没有进行操作,建议后续如果脚本执行到打开弹窗时,延时个几秒再去操作所弹窗 ...
- Understanding Docker
What is Docker? Docker 是一个开源的平台,设计目标是可以方便开发,方便部署和方便执行应用.使用docker可以快速分发开发好的应用.借助于Docker,你可以将开发平台 和应用分 ...
- 洛谷P2982 [USACO10FEB]慢下来Slowing down
题目 题目大意 :给出一棵树,节点有点权,求每个节点的祖先中点权小于该节点的结点的个数 . 思路如下 : 从根节点开始,对树进行深度优先遍历. 当进行到节点 i 时,有: $\text{i}$ 的祖 ...
- 转://Oracle not in查不到应有的结果(NULL、IN、EXISTS详解)
问题: 语句1 : Select * from table1 A where A.col1 not in ( select col1 from table2 B ) ...
- java 生成txt文件
FileWriter fileWriter = new FileWriter("C:/Users/li/Desktop/a.txt"); fileWriter.write(“aaa ...
- Linux下简单的缓冲区溢出
缓冲区溢出是什么? 科班出身,或者学过汇编的应该知道,当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持 ...