html5页面热力图几十万数据,基于百度地图的数据可视化,包括大量数据的标绘以及热力图的插入...

(function(global, factory) {

typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :

typeof define === 'function' && define.amd ? define(factory) :

(global.PointLine = factory());

}(this, (function() {

'use strict';

/**

* @author https://github.com/chengquan223

* @Date 2017-02-27

* */

function CanvasLayer(options) {

this.options = options || {};

this.paneName = this.options.paneName || 'labelPane';

this.zIndex = this.options.zIndex || 0;

this._map = options.map;

this._lastDrawTime = null;

this.show();

}

CanvasLayer.prototype = new BMap.Overlay();

CanvasLayer.prototype.initialize = function(map) {

this._map = map;

var canvas = this.canvas = document.createElement('canvas');

var ctx = this.ctx = this.canvas.getContext('2d');

canvas.style.cssText = 'position:absolute;' + 'left:0;' + 'top:0;' + 'z-index:' + this.zIndex + ';';

this.adjustSize();

this.adjustRatio(ctx);

map.getPanes()[this.paneName].appendChild(canvas);

var that = this;

map.addEventListener('resize', function() {

that.adjustSize();

that._draw();

});

return this.canvas;

};

CanvasLayer.prototype.adjustSize = function() {

var size = this._map.getSize();

var canvas = this.canvas;

canvas.width = size.width;

canvas.height = size.height;

canvas.style.width = canvas.width + 'px';

canvas.style.height = canvas.height + 'px';

};

CanvasLayer.prototype.adjustRatio = function(ctx) {

var backingStore = ctx.backingStorePixelRatio || ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio ||

ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;

var pixelRatio = (window.devicePixelRatio || 1) / backingStore;

var canvasWidth = ctx.canvas.width;

var canvasHeight = ctx.canvas.height;

ctx.canvas.width = canvasWidth * pixelRatio;

ctx.canvas.height = canvasHeight * pixelRatio;

ctx.canvas.style.width = canvasWidth + 'px';

ctx.canvas.style.height = canvasHeight + 'px';

// console.log(ctx.canvas.height, canvasHeight);

ctx.scale(pixelRatio, pixelRatio);

};

CanvasLayer.prototype.draw = function() {

var self = this;

var args = arguments;

clearTimeout(self.timeoutID);

self.timeoutID = setTimeout(function() {

self._draw();

}, 15);

};

CanvasLayer.prototype._draw = function() {

var map = this._map;

var size = map.getSize();

var center = map.getCenter();

if (center) {

var pixel = map.pointToOverlayPixel(center);

this.canvas.style.left = pixel.x - size.width / 2 + 'px';

this.canvas.style.top = pixel.y - size.height / 2 + 'px';

this.dispatchEvent('draw');

this.options.update && this.options.update.call(this);

}

};

CanvasLayer.prototype.getContainer = function() {

return this.canvas;

};

CanvasLayer.prototype.show = function() {

if (!this.canvas) {

this._map.addOverlay(this);

}

this.canvas.style.display = 'block';

};

CanvasLayer.prototype.hide = function() {

this.canvas.style.display = 'none';

//this._map.removeOverlay(this);

};

CanvasLayer.prototype.setZIndex = function(zIndex) {

this.canvas.style.zIndex = zIndex;

};

CanvasLayer.prototype.getZIndex = function() {

return this.zIndex;

};

var tool = {

merge: function merge(settings, defaults) {

Object.keys(settings).forEach(function(key) {

defaults[key] = settings[key];

});

},

//计算两点间距离

getDistance: function getDistance(p1, p2) {

return Math.sqrt((p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1]));

},

//判断点是否在线段上

containStroke: function containStroke(x0, y0, x1, y1, lineWidth, x, y) {

if (lineWidth === 0) {

return false;

}

var _l = lineWidth;

var _a = 0;

var _b = x0;

// Quick reject

if (y > y0 + _l && y > y1 + _l || y < y0 - _l && y < y1 - _l || x > x0 + _l && x > x1 + _l || x < x0 - _l && x <

x1 - _l) {

return false;

}

if (x0 !== x1) {

_a = (y0 - y1) / (x0 - x1);

_b = (x0 * y1 - x1 * y0) / (x0 - x1);

} else {

return Math.abs(x - x0) <= _l / 2;

}

var tmp = _a * x - y + _b;

var _s = tmp * tmp / (_a * _a + 1);

return _s <= _l / 2 * _l / 2;

},

// 判断点击图片的位置

containStrokeImage: function(clickPoint, markerPoint) {

var markerWidth = 32,

markerHeight = 32,

self = this;

var marker = self.isimageContent(markerPoint);

var arr = [];

if (marker.leftTopX <= clickPoint.x && clickPoint.x <= marker.rightBottomX && clickPoint.y < marker.rightBottomY &&

marker.leftTopY < clickPoint.y) {

return true;

} else {

return false;

}

// ctx.clearRech(0,0,ctx.width,ctx.height);

/**

* 1.点击的位置

* 2.计算出四个边角的位置

* 3. 筛选出是否在四边之内

*

*

*

*

* **/

},

isimageContent: function(markerPoint) {

return {

leftTopX: markerPoint.x,

leftTopY: markerPoint.y,

rightBottomX: markerPoint.x + 32,

rightBottomY: markerPoint.y + 32

}

},

//点击的区域重合的时候

selectZjFunc: function(markerarr, e) {

var thatSelectjl = 0;

var thatIndex = 0

var self = this;

markerarr.forEach((item, index) => {

var markerpix = item.marker.pixel;

var thisjl = self.selectjsFunc(markerpix, e)

if (thisjl > thatSelectjl) {

thatSelectjl = thisjl

thatIndex = index

}

})

return thatIndex;

},

// 计算点击的位置距离部署点位的距离

selectjsFunc: function(marker, e) {

return Math.sqrt((marker.x - e.x) * (marker.x - e.x) + (e.y - marker.y) * (e.y - marker.y))

},

//点聚合算法的实现1. 实现拆分屏幕

//2. 数据判断

//3. 实现绘制(仅限热力图,如果有后续需要做出标绘的点聚合,也可以)

cfpmFunc: function(width, height, cfWidth) {

var self = this;

//横向

var widthLength = parseInt(width / cfWidth) + 1;

var widthOver = width % cfWidth

var widthHeight = parseInt(height / cfWidth) + 1;

var heightOver = height % cfWidth

var pointarr = [];

for (var i = 1; i <= widthLength; i++) {

for (var j = 1; j <= widthHeight; j++) {

var obj = {}

obj.leftTopX = (i - 1) * cfWidth;

obj.leftTopY = (j - 1) * cfWidth;

obj.rightBottomX = (i - 1) * cfWidth;

obj.rightBottomY = (j - 1) * cfWidth;

if (i == widthLength) {

if (j == widthHeight) {

obj.rightBottomX = (i - 1) * cfWidth + widthOver;

obj.rightBottomY = (j - 1) * cfWidth + heightOver;

} else {

obj.rightBottomX = (i - 1) * cfWidth + widthOver;

obj.rightBottomY = j * cfWidth;

}

} else {

obj.rightBottomX = i * cfWidth;

obj.rightBottomY = (j - 1) * cfWidth + heightOver;

}

pointarr.push(obj)

}

}

return pointarr;

},

// 当前方框内是否存在数据

jhFunc: function(clickPoint, marker, width, height) {

var self = this;

if (marker.leftTopX <= clickPoint.x && clickPoint.x <= marker.rightBottomX && clickPoint.y < marker.rightBottomY &&

marker.leftTopY < clickPoint.y) {

return true;

} else {

return false;

}

},

};

//所有图片存储的位置

var base64Image = {

tzred:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMmMyNjgwOS1mOTMwLTQyYTEtYjBjZi1kNjYyNjY3MjFhYzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDREODQ2QTAxMTgyMTFFNDk0QTg5MjZDRjBEOTA3RDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDREODQ2OUYxMTgyMTFFNDk0QTg5MjZDRjBEOTA3RDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY2N2Q2MDAtM2RkMS00ZWZhLTgyNTktZTA0MWUyYTkwOTZjIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjMyYzI2ODA5LWY5MzAtNDJhMS1iMGNmLWQ2NjI2NjcyMWFjMSIvPiA8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"

}

var PointLine = function PointLine(map, userOptions) {

var self = this;

self.map = map;

self.lines = [];

self.pixelList = [];

//默认参数

//需要的数据

/**

* 经度,纬度,标题头 添加的点击事件

*

* **/

var options = {

};

//全局变量

var baseLayer = null,

//获取当前所需要的canvas的宽高

width = map.getSize().width,

height = map.getSize().height;

function Line(opts) {

// this.message = opts.message;//装备信息

// this.path = opts.path;//装备的位置

this.tzArr = opts.tzArr;

}

//绘制军标

Line.prototype.draw = function() {

var self = this;

var ctx = self.ctx;

var img = new Image();

//等待处理

// img.setAttribute("crossOrigin","")

img.onload = function() {

for (let i = 0; i < self.pixelList.length; i++) {

const item = self.pixelList[i]

ctx.drawImage(img, item.pixel.x, item.pixel.y, 32, 32);

}

// 存储到这个的全局变量

}

img.src = base64Image.tzred;

}

//热力图绘制

Line.prototype.drawHot = function() {

var self = this;

var ctx = self.ctx;

var radius = 50;

for (let i = 0; i < self.jhArr.length; i++) {

const item = self.jhArr[i]

if(!item){

continue

}

ctx.beginPath()

ctx.arc(item.pixel.x, item.pixel.y, radius, 0, 2 * Math.PI);

ctx.closePath()

let radialGradient = ctx.createRadialGradient(item.pixel.x, item.pixel.y, 0, item.pixel.x, item.pixel.y,

radius);

radialGradient.addColorStop(0.0, "rgba(0,0,0,1)")

radialGradient.addColorStop(1.0, "rgba(0,0,0,0)")

ctx.fillStyle = radialGradient;

//权重对比算法,替换算法

// let globalAlpha = (value - min) / (max - min);

// ctx.globalAlpha = Math.max(Math.min(globalAlpha, 1), 0)

ctx.fill()

}

//自定义调色板

var paientCanvas = document.createElement('canvas')

var paientctx = paientCanvas.getContext('2d');

let gradentConfig = {

'0.2': 'rgba(0,0,255,0.2)',

'0.3': 'rgba(43,111,231,0.3)',

'0.4': 'rgba(2,192,241,0.4)',

'0.6': 'rgba(44,222,148,0.6)',

'0.8': 'rgba(254,237,83,0.8)',

'0.9': 'rgba(255,118,55,0.9)',

'1.0': 'rgba(255,64,28,1)',

}

paientCanvas.width = 256;

paientCanvas.height = 1;

var gradient = paientctx.createLinearGradient(0, 0, 256, 1)

for (var key in gradentConfig) {

gradient.addColorStop(key, gradentConfig[key])

}

paientctx.fillStyle = gradient;

paientctx.fillRect(0, 0, 256, 1)

//获取到需要映射的imagedata

var imgdata = paientctx.getImageData(0, 0, 256, 1).data;

var img = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height)

var ctxImagedata = img.data

for (var i = 3; i < ctxImagedata.length; i += 4) {

var alpha = ctxImagedata[i]

var offset = alpha * 4;

if (!offset) {

continue

}

ctxImagedata[i - 3] = imgdata[offset]

ctxImagedata[i - 2] = imgdata[offset + 1]

ctxImagedata[i - 1] = imgdata[offset + 2]

}

//卡顿,需要点聚合的算法进行相应处理

ctx.putImageData(img, 0, 0, 0, 0, ctx.canvas.width, ctx.canvas.height)

}

//底层canvas添加

var brush = function brush() {

// 创建一个新的canvas

var baseCtx = baseLayer.canvas.getContext('2d');

if (!baseCtx) {

return;

}

//添加军标

addLine();

baseCtx.clearRect(0, 0, width, height);

//获取当前地图层级

var zoom = map.getZoom();

self.lines.pixelList = [];

self.lines.tzArr.forEach((item) => {

self.lines.pixelList.push({

message: item.message,

pixel: map.pointToPixel(item.H)

})

})

self.lines.ctx = baseCtx

if (zoom > 12) {

self.lines.draw();

} else {

//将屏幕分为50*50的网格,并且确定左上角和右下角的点的位置

var pmWg = tool.cfpmFunc(baseCtx.canvas.width, baseCtx.canvas.height, 50)

//将网格内存在的点做进一步的筛选

// console.log(pmWg)

var jhArr = []

self.lines.tzArr.forEach((item) => {

var thisPixel = map.pointToPixel(item.H);

//筛选掉超出屏幕边界的点

if (thisPixel.x < 0 || thisPixel.y < 0 || thisPixel.x > baseCtx.canvas.width || thisPixel.y > baseCtx.canvas

.height) {

return

}

//进一步筛选点

for (let k in pmWg) {

var itemWg = pmWg[k]

if (tool.jhFunc(thisPixel, itemWg, 50, 50)) {

if (jhArr[k]) {

continue;

} else {

jhArr[k] = {

message: item.message,

pixel: thisPixel

}

}

}

}

})

self.lines.jhArr = jhArr;

self.lines.drawHot();

}

};

var addLine = function addLine() {

// if (self.lines!=""&&!self.lines) return;

var dataset = options.data;

dataset.forEach((item, index) => {

item.H = new BMap.Point(item.lng, item.lat)

})

var line = new Line({

tzArr: dataset

})

self.lines = line;

};

self.init(userOptions, options);

baseLayer = new CanvasLayer({

map: map,

update: brush

});

this.clickEvent = this.clickEvent.bind(this);

this.bindEvent();

};

PointLine.prototype.init = function(settings, defaults) {

//合并参数

tool.merge(settings, defaults);

this.options = defaults;

};

PointLine.prototype.bindEvent = function(e) {

var map = this.map;

if (this.options.methods) {

if (this.options.methods.click) {

map.setDefaultCursor("default");

map.addEventListener('click', this.clickEvent);

}

if (this.options.methods.mousemove) {

map.setDefaultCursor("default");

map.addEventListener('mousemove', this.moveEvent);

}

}

};

PointLine.prototype.clickEvent = function(e) {

var self = this,

lines = self.lines.pixelList;

var curPt = e.pixel;

var arr = []

if (lines.length > 0) {

lines.forEach(function(marker, i) {

var markerPixel = marker.pixel;

var isOnMarker = tool.containStrokeImage(curPt, markerPixel)

if (isOnMarker) {

arr.push({

index: i,

marker: marker

})

}

});

}

if (arr.length > 1) {

var lastGod = tool.selectZjFunc(arr, curPt)

self.options.methods.click(e, arr[lastGod].marker.message);

return;

} else if (arr.length == 1) {

var lastGod = arr[0].marker.message

self.options.methods.click(e, arr[0].marker.message);

return;

} else {

return;

}

};

return PointLine;

})));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

管理Jenkins作业配置

在JBoss工具和Developer Studio中&#xff0c;我们在Jenkins中管理许多构建作业。 实际上&#xff0c;对于3.2.x / 4.x和3.3.x / 5.x流&#xff0c;有195个以上的作业。 当我们开始建立明年的第一个里程碑时&#xff0c;我们将再产生40多个工作岗位。 这里是其中的一些&#xf…

Redis命令拾遗三(列表List类型)

本文版权归博客园和作者吴双本人共同所有。转载和爬虫请注明原文地址 Redis五种数据类型之列表类型Redis五种数据类型之列表类型。你可以存储一个有序的字符串列表一类数据。比如你想展示你所存储的所有文章中的前十条&#xff0c;当分页取下一页的时候&#xff0c;你也可以取接…

angular2安装笔记

主要摘自&#xff1a;http://www.runoob.com/angularjs2/angularjs2-typescript-setup.html http://blog.csdn.net/lgpwwa/article/details/51788035 开始尝试的时候npm install一直不能正常生成modules文件内的东东&#xff0c;后来试了多次才知道&#xff0c;大概是因为服务器…

计算机桌面上的声音图标没了怎么办,电脑声音图标不见了怎么办超详细教程

我们在用电脑或者平板看视频、听歌的时候&#xff0c;如果声音不合适&#xff0c;大了或小了就会调节音量&#xff0c;除了可以选择设备自带的外部音量大小调节按键外&#xff0c;还可以用自带的声音图标来调节&#xff0c;而屏幕上的声音图标是最方便的。如果屏幕上的声音图标…

XML解组基准:JAXB,STAx,Woodstox

介绍 上周末&#xff0c;我开始考虑如何以一种资源友好的方式处理大量XML数据。我要解决的主要问题是如何以块的形式处理大型XML文件&#xff0c;同时提供上游/下游系统&#xff0c;需要处理一些数据。 当然&#xff0c;我已经使用JAXB技术已有几年了。 使用JAXB的主要优点是可…

ArcGIS空间分析工具

1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset &#xff08;3D 要素工具集&#xff09; Add Z Information 添加 Z 信息 添加关于具有 Z 值的要素类中的要素的高程属性的信息。 Buffer 3D 3D 缓冲 围绕点或线创建三维缓冲区以生成球形或圆柱形的多面…

SHELL编程中如果路径名遇到括号

linux中&#xff0c;如果文件名中带括号&#xff0c;应先对括号处理&#xff0c;在“(”和“&#xff09;”前加上“\”。Bracket_Handle给出了处理方法&#xff1a;sub Bracket_Handle { my ($tmp_name) _; $tmp_name ~ s/\(/\\\(/g; # ( > \( $tmp_name ~ s/\)/…

计算机科学家和心理学家合作,生物智能与人工智能之间的合作

李飞飞带领的斯坦福“以人为本AI研究院”发表文章&#xff0c;探讨人工智能、神经科学、心理学和认知科学&#xff0c;以及数学、物理和社会科学等学科过去是怎样、以及未来将如何共同合作&#xff0c;追求对理解和创造智能系统的探索。最初的类人智能出现在几百万年前的非洲大…

JavaOne 2012 – 2400小时! 一些建议

您可能已经看到JavaOne 2012 Content Catalog在线。 计划委员会经过数周的艰苦工作&#xff0c;对每个提案进行了分类&#xff0c;审查&#xff0c;评分和讨论&#xff0c;我们终于为您设置了&#xff08;希望如此&#xff09;有趣的组合。 整整105天或2400个小时&#xff0c;我…

C语言

自定义函数 &#xff08;1&#xff09;在函数使用之前定义函数 &#xff08;2&#xff09;先声明这个函数&#xff0c;然后使用&#xff0c;使用的代码后面定义这个函数 include <stdio.h> void syahello(){ println("helloo"); }int main(){ sayhello(); // 调…

【Centos】yum 安装mariaDB

[dream361za ~]$ sudo yum search mariadb #查找需安装的包 mariadb-libs.x86_64 : The shared libraries required for MariaDB/MySQL clients #mariadb客户端 mariadb-server.x86_64 : The MariaDB server and related files #mariadb服务 [dream361za ~]$ sudo yum instal…

对口升学计算机组装与维护,对口升学信息技术(计算机)类2017年专业课考试大纲...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼山西省中等职业学校对口升学考试大纲信息技术类专业本考试大纲是以国家中等职业学校计算机专业教学指导方案为依据&#xff0c;以中等职业教育国家规划教材《物理(电工电子类)》(李广华、郝翠兰主编&#xff0c;电子工业出版社)、《…

网页性能优化(初窥)

面试的时候经常会被问到的有关于前端性能优化这一块的问题&#xff0c;扯扯个人的理解 第一条&#xff1a;减少 HTTP 次数的请求 80%的最终用户响应时间花在前端程序上&#xff0c;而其大部分时间则花在各种页面元素&#xff0c; 如图像、 样式表、 脚本和 Flash 等&#xff0c…

STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

Ⅰ、写在前面 关注我分享文章的朋友应该知道我在前面讲述过&#xff08;软件、硬件&#xff09;I2C主机控制从机EEPROM的例子。在I2C通信主机控制程序是比较常见的一种&#xff0c;可以说在实际项目中&#xff0c;很多应用都会使用到I2C通信。但在实际项目中作为I2C从机的应用相…

JavaFX 2:创建登录表单

在本教程中&#xff0c;我将使用JavaFX 2和CSS设计漂亮的Login Form 。 它是经典的登录表单&#xff0c;带有用户名和密码以及登录按钮。 为了遵循本教程&#xff0c;我强烈建议您查看以下这些教程&#xff1a; Eclipse IDE中的JavaFX 2入门 JavaFX 2&#xff1a;HBox JavaFX…

c html导出成word,html转word-html如何转换成WORD

1、打开HTML文件&#xff0c;点击菜单栏文件→使用MicrosoftOfficeWord编辑&#xff0c;之后系统会自动打开Word并显示HTML文件的内容&#xff0c;这是保存即可。2、如果找不到“使用MicrosoftOfficeWord编辑”的话&#xff0c;点击菜单栏工具→Internet选项→程序→HTML编辑器…

怎么解决tomcat占用8080端口问题

怎么解决tomcat占用8080端口问题 相信很多朋友都遇到过这样的问题吧&#xff0c;tomcat死机了&#xff0c;重启eclipse之后&#xff0c;发现Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.The server may already be running in…

ADO Recordset 对象链接

http://baike.baidu.com/link?url4Xdc46R8M5uj-BbOGaH761N5oDEYlGQJFeR2WbPwx1iQBusAUKU3qbWcHZCMmayatj9nzxPW7HdPToL6roD3Y_ 转载于:https://www.cnblogs.com/loanhicks/p/5788451.html

mvc4 html.beginform,MVC4 Html.BeginForm在Internet Explorer中提交按钮 9不工

我已经写在ASP.NET MVC4 /剃刀的形式。 该表格后很完善在Firefox和Chrome&#xff0c;但由于某种原因在Internet Explorer 10和11&#xff0c;“提交”按钮没有反应。 (Internet Explorer 9的作品也不错)。这是我的看法形式的样子&#xff1a;using (Html.BeginForm("MyAc…

页面传值的方法 和JSON与字符串和对象之间的转换

json数据解析 就是将json转换为数组或对象 json数据序列化 就是将数组或对象转化为json转载于:https://www.cnblogs.com/yaomengli/p/6678709.html