ajax请求的json数据,获取的对象数组中,每个对象的属性顺序是怎么排的,这个排序的依据是什么呢 10C

如下图

ajax请求的json数据,获取的对象数组中,每个对象的属性顺序是怎么排的,这个排序的依据是什么呢 ?

如图中描述的,我两种json数据,第一种和第二种区别就是前者的每个对象中后三个属性都加了一个文字**“年”**,为什么请求后输出的数组对象中每个对象属性顺序变了呢,这个顺序是怎么决定的呢,依据是什么呢,还望大佬慷慨解囊,为我传授一些方面的知识
问题诉求描述

3个回答

属性本身就是无序的,如果你非要顺序,应该序列化成列表,而不是属性字典的形式。
之所以顺序改变,这个取决于json序列化/反序列化程序的实现。

这种key:value键值对形式的数据的排序是无序的哥们,因为这种排序根本毫无意义。你如果想取到数字里面的指标这个值,那你可以通过遍历,比如你这个数组名为data,遍历以后你可以这样取用它:data[i].指标。

这个对后台取数据没有影响的,后台取数据遍历的时候,还是按照属性来取的。

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mvc4中ajax请求重定向问题
在mvc4中我有一个过滤器 在每一个action前都会先调用一次,里面的方法是用来判断用户是否登录如果是程序发出的请求还好可以重定向到登录页面 但ajax 的请求就无法重定向,我现在有一个解决方法但是 还是不完美 这是我的过滤器,如果是ajax的请求就在浏览器头部设置一个标记 ``` protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (UserInfo == null) { //如果是Ajax 请求的 要特殊处理 if (HttpContext.Request.IsAjaxRequest()) { //添加头部信息 前端会有ajax回调 判断 Response.AddHeader("sessionstatus", "timeout"); return; } else { //正常的请求 filterContext.Result = new RedirectToRouteResult( "Default", new RouteValueDictionary( new { controller = "Login/Login", action = "Login" })); } } else { base.OnActionExecuting(filterContext); } } ``` 如果标记是ajax的就 在我的js 里设置一段全局的 js代码 如果是标记的 就用js 来定向 登录页面 ``` /** * 设置未来(全局)的AJAX请求默认选项 * 主要设置了AJAX请求遇到Session过期的情况 */ $.ajaxSetup({ type: 'POST', complete: function (xhr, status) { var sessionStatus = xhr.getResponseHeader('sessionstatus'); if (sessionStatus == 'timeout') { //var yes = confirm('由于您长时间没有操作, session已过期, 请重新登录.'); //if (yes) { window.location.href = '/Login/Login/Login'; // } } } }); ``` 那么问题来了 我这里 设置完标记后 js也重定向了 但是 我请求的 query 这个查询方法 必须要 全部执行完 才重新定向登录页面 下面这个 方法会执行 ``` public string Query() { //string BeginDate = Request.Form["BeginDate"]; //string EndDate = Request.Form["EndDate"]; string MemberNO = Request.Form["MemberNo"]; string MemberName = Request.Form["MemberName"]; int pageIndex = Request.Form["page"] != "" ? Convert.ToInt32(Request.Form["page"]) : 0; int pageSize = Request.Form["rows"] != "" ? Convert.ToInt32(Request.Form["rows"]) : 0; StringBuilder WhereCode = new StringBuilder(" CompanyID = "+this.UserInfo.CompanyID); //if (!string.IsNullOrEmpty(BeginDate)) //{ // WhereCode.Append(" AND (RegisterDate >= '" + BeginDate + "')"); //} //if (!string.IsNullOrEmpty(EndDate)) //{ // WhereCode.Append(" AND (RegisterDate <= '" + EndDate + "')"); //} if (!string.IsNullOrEmpty(MemberNO)) { WhereCode.Append(" AND MemberNo ='" + MemberNO + "'"); } if (!string.IsNullOrEmpty(MemberName)) { WhereCode.Append(" AND MemberName like '%" + MemberName + "%'"); } WhereCode.Append(" AND (Status = 'A') AND (MemberType = '01')"); MemberService memberInfo = new MemberService(); string json = memberInfo.GetMemberInfo(WhereCode.ToString(), pageIndex, pageSize); return json; } ``` 不是 谁有好的解决方案 如果我是ajax 的请求 就让请求 不继续 执行 直接重定向
怎么通过选择器,选择到AJAX html添加的页面属性.
需要做一个心跳检测. 一级页面展示的是一个设备分组,通过点击设备相应的分组. 发送AJAX请求查询当前分组下的设备. 然后将查询到的数据通过html写入到页面(html,或者取json解析append添加都可以).这一步完成之后. 我需要在这个页面取到通过html写入页面的每个div框中的id值. 但是由于是异步请求,没有刷新页面, 我的选择器,选不到异步加载的div.请问我怎么才能取到这些异步加载的div中的id值.需要再做一个异步的 心跳检测功能,在当前打开的设备分组下获取当前展示的所有设备的id,传到后台去. ``` ```
select2 ajax获取java后台下拉框数据 并回显选中的值
用ajax 请求后台值后 发现 下拉框没有搜索功能了 ![图片说明](https://img-ask.csdn.net/upload/201808/05/1533440496_530669.png) ``` * 执行select2方法初始化 */ function select2Execute() { var dataList = [ { id: 0, text: 'enhancement' }, { id: 1, text: 'bug' }, { id: 2, text: 'duplicate' }, { id: 3, text: 'invalid' }, { id: 4, text: 'wontfix' } ]; var dataList1=[{'id':"1","text":"enhancement"}]; $(function() { /*本地注入方式*/ $(".downList2").select2({ // $("select[name='xuewei_id']").select2({ // $('select[id="xuewei_id"]').select2({ // $('#xuewei_id').select2({ // $("#selectSection").find("select.combox").select2({ // $(".select2-selection__choice").select2(); // $(".combox").select2({ placeholder : "请至少选择一个人名", tags : true, createTag : function(decorated, params) { return null; }, width : '256px', ajax: { url: '/erzhentang/manage/forAjax.do?requestType=12.5_1', dataType: 'json', data: function (params) { var query = { //请求的参数, 关键字和搜索条件之类的 search: params.term //select搜索框里面的value } // Query paramters will be ?search=[term]&page=[page] return query; }, delay: 250, processResults: function (data, params) { //返回的选项必须处理成以下格式 var results = [{ id: 0, text: 'enhancement' }, { id: 1, text: 'bug' }, { id: 2, text: 'duplicate' }, { id: 3, text: 'invalid' }, { id: 4, text: 'wontfix' }]; return { results: results //必须赋值给results并且必须返回一个obj }; } }, allowClear: true,//允许清空 escapeMarkup: function (markup) { return markup; }, // 自定义格式化防止xss注入 minimumInputLength: 0, formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果 formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); //two AJAX获取数据方式 //$("select[name='xuewei_id']").select2({ /*$(".downList2").select2({ ajax: { type:'GET', url: '/erzhentang/manage/forAjax.do?requestType=12.5_1', // url: dataList1, dataType: 'json', delay: 250, data: function (params) { return { q: params.term, // search term 请求参数 page: params.page }; }, processResults: function (data, params) { params.page = params.page || 1; var itemList = []; var arr = data.result.list for(item in arr){ itemList.push({id: item, text: arr[item]}) } var itemList = []; var results = [{ id: 0, text: 'enhancement' }, { id: 1, text: 'bug' }, { id: 2, text: 'duplicate' }, { id: 3, text: 'invalid' }, { id: 4, text: 'wontfix' }]; var arr = result.list for(item in arr){ itemList.push({id: item, text: arr[item]}) } var results = [{ id: 0, text: 'enhancement' }, { id: 1, text: 'bug' }, { id: 2, text: 'duplicate' }, { id: 3, text: 'invalid' }, { id: 4, text: 'wontfix' }]; // var results=[{"id":"68","text":"平和质"},{"id":"104","text":"特禀质"}] return { // results: data.items,//itemList results: results , //必须赋值给results并且必须返回一个obj // results: data,//itemList pagination: { more: (params.page * 2) < data.total_count } }; }, cache: true }, placeholder:'请选择',//默认文字提示 language: "zh-CN", tags: true,//允许手动添加 allowClear: true,//允许清空 escapeMarkup: function (markup) { return markup; }, // 自定义格式化防止xss注入 minimumInputLength: 0, formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果 formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 });*/ function formatState(state) { if (!state.id) { return state.text; } var $state = $('<span>' + state.text + '</span>'); return $state; } ; $('#sel_recommender').select2({ placeholder : "请选择一个人名", templateResult : formatState, width : '256px' }); // 通过id获取select2的text值,这里的text值可能有空格,需注意 function getSelect2Text(obj) { var select2Obj = $("select[name='xuewei_id']").select2(); return select2Obj.find("option:selected").text(); } /* 获取每一个name对应的值 */ var strXueweiId = ""; $("[name=xuewei_id]").each(function() { alert("this值:" + $(this).val()); /* 拼接每一项name的值 组合成和其它项目类似 gender那样的数组 */ strXueweiId += $(this).val() + "-"; }); alert("strXueweiId:" + strXueweiId) $("#strXueweiId").val(strXueweiId) }); } ```
关于ajax发送几次请求后不再发送的问题
本人今天在跟视频做小项目,遇到一个比较棘手的问题贴出来希望大神能解答。 关于一个商城商品分类列表的目录问题, 这是前端发送的ajax请求,目的是获取数据库中的分类列表,回调函数是处理ul列表 ```<script type="text/javascript"> $(function(){ var content = ""; $.post( "${pageContext.request.contextPath}/categoryList", function(data){ for(var i=0;i<data.length;i++){ content += "<li><a href='#'>"+data[i].cname+"</a></li>"; } $("#category").html(content); }, "json" ); }); </script> ``` `` Jedis jedis = JedisPoolUtils.getJedis(); String list = jedis.get("category_list"); //判断是否为空 if(list == null){ //查询mysql数据库 ProductService service = new ProductService(); List<Category> list_category = null; try { list_category = service.findCategoryList(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } //将获得的结果转化为json格式 Gson gson = new Gson(); list = gson.toJson(list_category); //将数据写入redis jedis.set("category_list", list); } //将数据返回前台(注意转换编码) response.setContentType("text/html;charset=utf-8"); response.getWriter().write(list); ``` 这是后端对于请求的处理,service和dao不再贴了,验证后没有问题,如代码所示,是先查找redis数据库中有无信息,再决定是否去mysql中查找, 第一次运行成功 如图![图片说明](https://img-ask.csdn.net/upload/201709/01/1504248552_91216.png) 刷新网页八次后![图片说明](https://img-ask.csdn.net/upload/201709/01/1504248591_140319.png) 打断点发现每到第八次以后,页面都不再发送ajax请求,导致写入列表的数据为空,与cookie无关,与浏览器版本无关,(已经尝试过)可能与redis数据库有关??不知道求大神解答,在后端打的断点第八次以后就会跳过。。。说明ajax请求第八次以后就到不了servlet了。。。
怎么把网页1的导航完美移植到网页2的轮播图上边的位置使导航和轮播图结合成一个网页
网页1带导航的 <!DOCTYPE html> <html> <head> <link rel="icon" href="images/favicon.ico" type="img/x-ico" /> <title>山东金泽网络科技有限公司</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta charset="utf-8"> <meta name="keywords" content="" /> <script type="application/x-javascript"> addEventListener("load", function () { setTimeout(hideURLbar, 0); }, false); function hideURLbar() { window.scrollTo(0, 1); } </script> <link href="css/bootstrap.css" rel='stylesheet' type='text/css' /> <link rel="stylesheet" href="css/flexslider.css" type="text/css" media="screen" property="" /> <link href="css/style.css" rel='stylesheet' type='text/css' /> <link href="css/simpleLightbox.css" rel='stylesheet' type='text/css' /> <link href="css/fontawesome-all.css" rel="stylesheet"> <link href="http://fonts.googleapis.com/css?family=Poppins:100i,200,200i,300,400,400i,500,500i,600,600i,700,700i,800" rel="stylesheet"> </head> <body> <header> <div class="header_top" id="home"> <nav class="navbar navbar-toggleable-md navbar-light bg-faded"> <a class="navbar-brand" href="index.html"> <i class="fab fa-digital-ocean"></i> 金泽科技</a> <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mx-auto tp-nav text-center"> <li class="nav-item active"> <a class="nav-link" href="index.html">首页 <span class="sr-only">(current)</span> </a> </li> <li class="nav-item"> <a class="nav-link" href="about.html">关于</a> </li> <li class="nav-item"> <a class="nav-link" href="了解银豹.html">解决方案</a> </li> <li class="nav-item"> <a class="nav-link" href="blog.html">博客</a> </li> <li class="nav-item"> <a class="nav-link" href="contact.html">联系我们</a> </li> </ul> <form action="#" method="post" class="form-inline my-2 my-lg-0 search"> <input class="form-control mr-sm-2" type="search" placeholder="点击输入搜索..." name="Search" required> <button class="btn btn-outline-success my-2 my-sm-0" type="submit">搜索</button> </form> </div> </nav> </div> </header> <!--//header--> </body> </html> ``` 网页2 轮播图代码: ``` <!DOCTYPE html> <html> <head> <link rel="icon" href="images/favicon.ico" type="img/x-ico" /> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>山东金泽网络科技有限公司</title> <link rel="stylesheet" href="css/style.css" /> </head> <body> <div class="c-banner"> <div class="banner"> <ul> <li><img src="img/lunbo1.jpg"></li> <li><img src="img/lunbo2.jpg"></li> <li><img src="img/lunbo3.jpg"></li> </ul> </div> <div class="nexImg"> <img src="img/nexImg.png" /> </div> <div class="preImg"> <img src="img/preImg.png" /> </div> <div class="jumpBtn"> <ul> <li jumpImg="0"></li> <li jumpImg="1"></li> <li jumpImg="2"></li> </ul> </div> </div> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript"> //定时器返回值 var time=null; //记录当前位子 var nexImg = 0; //用于获取轮播图图片个数 var imgLength = $(".c-banner .banner ul li").length; //当时动态数据的时候使用,上面那个删除 // var imgLength =0; //设置底部第一个按钮样式 $(".c-banner .jumpBtn ul li[jumpImg="+nexImg+"]").css("background-color","black"); //页面加载 $(document).ready(function(){ // dynamicData(); //启动定时器,设置时间为3秒一次 time =setInterval(intervalImg,3000); }); //点击上一张 $(".preImg").click(function(){ //清楚定时器 clearInterval(time); var nowImg = nexImg; nexImg = nexImg-1; console.log(nexImg); if(nexImg<0){ nexImg=imgLength-1; } //底部按钮样式设置 $(".c-banner .jumpBtn ul li").css("background-color","white"); $(".c-banner .jumpBtn ul li[jumpImg="+nexImg+"]").css("background-color","black"); //将当前图片试用绝对定位,下一张图片试用相对定位 $(".c-banner .banner ul img").eq(nowImg).css("position","absolute"); $(".c-banner .banner ul img").eq(nexImg).css("position","relative"); //轮播淡入淡出 $(".c-banner .banner ul li").eq(nexImg).css("display","block"); $(".c-banner .banner ul li").eq(nexImg).stop().animate({"opacity":1},1000); $(".c-banner .banner ul li").eq(nowImg).stop().animate({"opacity":0},1000,function(){ $(".c-banner ul li").eq(nowImg).css("display","none"); }); //启动定时器,设置时间为3秒一次 time =setInterval(intervalImg,3000); }) //点击下一张 $(".nexImg").click(function(){ clearInterval(time); intervalImg(); time =setInterval(intervalImg,3000); }) //轮播图 function intervalImg(){ if(nexImg<imgLength-1){ nexImg++; }else{ nexImg=0; } //将当前图片试用绝对定位,下一张图片试用相对定位 $(".c-banner .banner ul img").eq(nexImg-1).css("position","absolute"); $(".c-banner .banner ul img").eq(nexImg).css("position","relative"); $(".c-banner .banner ul li").eq(nexImg).css("display","block"); $(".c-banner .banner ul li").eq(nexImg).stop().animate({"opacity":1},1000); $(".c-banner .banner ul li").eq(nexImg-1).stop().animate({"opacity":0},1000,function(){ $(".c-banner .banner ul li").eq(nexImg-1).css("display","none"); }); $(".c-banner .jumpBtn ul li").css("background-color","white"); $(".c-banner .jumpBtn ul li[jumpImg="+nexImg+"]").css("background-color","black"); } //轮播图底下按钮 //动态数据加载的试用应放在请求成功后执行该代码,否则按钮无法使用 $(".c-banner .jumpBtn ul li").each(function(){ //为每个按钮定义点击事件 $(this).click(function(){ clearInterval(time); $(".c-banner .jumpBtn ul li").css("background-color","white"); jumpImg = $(this).attr("jumpImg"); if(jumpImg!=nexImg){ var after =$(".c-banner .banner ul li").eq(jumpImg); var befor =$(".c-banner .banner ul li").eq(nexImg); //将当前图片试用绝对定位,下一张图片试用相对定位 $(".c-banner .banner ul img").eq(nexImg).css("position","absolute"); $(".c-banner .banner ul img").eq(jumpImg).css("position","relative"); after.css("display","block"); after.stop().animate({"opacity":1},1000); befor.stop().animate({"opacity":0},1000,function(){ befor.css("display","none"); }); nexImg=jumpImg; } $(this).css("background-color","black"); time =setInterval(intervalImg,3000); }); }); //动态数据轮播图 //动态数据加载的时候不要直接点击demo.html运行否则可能请求不到本地json数据 // function dynamicData(){ // $.ajax({ // url:"js/test.json", // type:"get", // dataType:"json", // success:function(data){ // if(data.code==1){ // var data = data.data; // $.each(data,function(i){ // $(".c-banner .banner ul").append('<li><img src="'+this.img+'"></li>'); // $(".c-banner .jumpBtn ul").append('<li jumpImg="'+i+'"></li>') // }) // } // //获取图片总数量 // imgLength = $(".c-banner .banner ul li").length; // //为底部按钮定义单击事件 // $(".c-banner .jumpBtn ul li").each(function(){ // //为每个按钮定义点击事件 // $(this).click(function(){ // clearInterval(time); // $(".c-banner .jumpBtn ul li").css("background-color","white"); // jumpImg = $(this).attr("jumpImg"); // if(jumpImg!=nexImg){ // var after =$(".c-banner .banner ul li").eq(jumpImg); // var befor =$(".c-banner .banner ul li").eq(nexImg); // // //将当前图片试用绝对定位,下一张图片试用相对定位 // $(".c-banner .banner ul img").eq(nexImg).css("position","absolute"); // $(".c-banner .banner ul img").eq(jumpImg).css("position","relative"); // // after.css("display","block"); // after.stop().animate({"opacity":1},1000); // befor.stop().animate({"opacity":0},1000,function(){ // befor.css("display","none"); // }); // nexImg=jumpImg; // } // $(this).css("background-color","black"); // time =setInterval(intervalImg,3000); // }); // }); // } // }) // } </script> <div style="text-align:center;margin:10px 0; font:normal 14px/24px 'MicroSoft YaHei';"> </div> </body> </html> ``` ```
select2 ajax 获取java后台数据 提示params is not defined
下拉框没有任何选项内容 ![图片说明](https://img-ask.csdn.net/upload/201808/05/1533410857_939033.png) js代码 ``` /* 执行select2方法初始化 */ function select2Execute() { var dataList = [ { id: 0, text: 'enhancement' }, { id: 1, text: 'bug' }, { id: 2, text: 'duplicate' }, { id: 3, text: 'invalid' }, { id: 4, text: 'wontfix' } ]; var dataList1=[{'id':"1","text":"enhancement"}]; $(function() { /*本地注入方式*/ /*$("select[name='xuewei_id']").select2({ // $('select[id="xuewei_id"]').select2({ // $('#xuewei_id').select2({ // $("#selectSection").find("select.combox").select2({ // $(".select2-selection__choice").select2(); // $(".combox").select2({ placeholder : "请至少选择一个人名", tags : true, createTag : function(decorated, params) { return null; }, width : '256px', });*/ //two AJAX获取数据方式 //$("select[name='xuewei_id']").select2({ $(".downList2").select2({ ajax: { type:'GET', // url: '/erzhentang/manage/forAjax.do?requestType=12.1', url: dataList1, dataType: 'json', delay: 250, data: function (params) { return { q: params.term, // search term 请求参数 page: params.page }; }, processResults: function (data, params) { params.page = params.page || 1; /*var itemList = []; var arr = data.result.list for(item in arr){ itemList.push({id: item, text: arr[item]}) }*/ return { results: data.items,//itemList pagination: { more: (params.page * 2) < data.total_count } }; }, cache: true }, placeholder:'请选择',//默认文字提示 language: "zh-CN", tags: true,//允许手动添加 allowClear: true,//允许清空 escapeMarkup: function (markup) { return markup; }, // 自定义格式化防止xss注入 minimumInputLength: 0, formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果 formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); function formatState(state) { if (!state.id) { return state.text; } var $state = $('<span>' + state.text + '</span>'); return $state; } ; $('#sel_recommender').select2({ placeholder : "请选择一个人名", templateResult : formatState, width : '256px' }); // 通过id获取select2的text值,这里的text值可能有空格,需注意 function getSelect2Text(obj) { var select2Obj = $("select[name='xuewei_id']").select2(); return select2Obj.find("option:selected").text(); } /* 获取每一个name对应的值 */ var strXueweiId = ""; $("[name=xuewei_id]").each(function() { alert("this值:" + $(this).val()); /* 拼接每一项name的值 组合成和其它项目类似 gender那样的数组 */ strXueweiId += $(this).val() + "-"; }); alert("strXueweiId:" + strXueweiId) $("#strXueweiId").val(strXueweiId) }); } ```
Ext.Ajax.request() 请求
请问一下: 对Ext.Ajax 与服务器的交互一直都不太能理解,并且对Ext.Ajax.request() 在什么时候才用,是每个请求都需要吗,但是有时只是跳转到另外一个页面,比如, 我要修改一行数据,点击修改连接,这样子就跳到修改页面,那是需要通过ajax请求吗? 它的请求也是必须要有返回函数吗? 如果提交一个请求到action,什么情况才考虑到 需要用resposne返回数据到前台页面? 对这方面都一直有点困扰了? 对了,还有个问题,如果将后台数据加载到表单页面里面?只是直接将得到的数据存为json格式就可以了吗?
jqery dataTable请求获取到新数据后,表格不刷新
js代码 ``` var oTable = $('#sample_editable_1').dataTable({ "aLengthMenu": [ [5, 15, 20, -1], [5, 15, 20, "All"] // change per page values here ], // set the initial value "iDisplayLength": 15, "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>", "sPaginationType": "bootstrap", "oLanguage": { "sLengthMenu": "_MENU_ 每页显示条数", "oPaginate": { "sPrevious": "上一页", "sNext": "下一页" } }, "aoColumns" : [{ 'mDataProp' : "clazzName", 'sDefaultContent':'' },{ "mDataProp" : "course.courseName", 'sDefaultContent':'' }, { "mDataProp" : "teacher.userName", 'sDefaultContent':'' } , { "mDataProp" : "laboratory.labName", 'sDefaultContent':'' } , { "mDataProp" : "", 'sDefaultContent':'', "fnRender" : function(o,val){ return "<a class='edit' href='javascript:;'>编辑</a>" } }, { "mDataProp" : "id", 'sDefaultContent':'', "fnRender" : function(o,val){ return "<a class='delete' href='javascript:;'>删除</a><input id='saveId' type='hidden' value=\""+val+"\">" } }], "bProcessing":false, "bServerSide":true, 'sAjaxDataProp': 'aaData', "sAjaxSource":"/labAdmin/getClazzList?labId="+labId, "fnServerData":function ( sSource,aoData, fnCallback) { $.ajax({ url : sSource,//这个就是请求地址对应sAjaxSource data : {"aoData":JSON.stringify(aoData)},//这个是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数 type : 'post', dataType : 'json', async : false, success :fnCallback, error : function(msg) { } }); } }); ``` 页面刷新后的情况: ![图片说明](https://img-ask.csdn.net/upload/201605/18/1463543123_798520.jpg) 页面刷新后请求返回情况:(共6条) ![图片说明](https://img-ask.csdn.net/upload/201605/18/1463543018_987557.jpg) 在即时模糊框里输入查询信息后的请求返回情况:(可以看到只有两条) ![图片说明](https://img-ask.csdn.net/upload/201605/18/1463543068_795680.jpg) 但是表格并没有刷新:![图片说明](https://img-ask.csdn.net/upload/201605/18/1463543112_950086.jpg)
使用Apexcharts.js中的brush类型图表,上面的折线图无法刷新,求教问题在哪?
# Apexcharts.js中的brush类型图表无法刷新数据 求教各路大神,本人最近在做一个前端开发项目,需要用一张图来展现100个数据,这100个数据是从通过ajax请求从后端接收的,每10秒轮询一次,更新100个数据。 网上找到了开源库apexcharts.js,瞬间被高大上的brush类型图所吸引,引入到我在开发的程序中(网上demo图如下): ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562392234_131426.jpg) 但是出现了下面柱状图数据刷新正常,而上面折线图无法刷新的问题,如下图所示,详细问题描述和代码也在下方,谢谢各位。 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393740_668680.png) 我根据示例代码和官方网站上的doc进行了修改,并移植到开发的程序中。大致原理是:打开网页——前端按10秒钟轮询方式通过ajax发送请求到后端——后端python程序生成100个数据,通过json格式返回前端——前端更新数据并刷新图表 前端跟后端交互的代码如下 ``` var storm_data_s6a = ""; var strom_time_s6a = ""; $(document).ready(function(){ setInterval(function(){$.ajax({ type:"POST", url:"/sigStorm/", dataType:"json", contentType:"application/json", data:JSON.stringify({"S6a_storm":true,"Cx_storm":true,"Rejcall":true}), success:function(res){ storm_data_s6a = res.S6a_storm; storm_time_s6a = res.storm_time; //alert(storm_data_s6a[15]); stormFigure() } }) },100000); }); ``` 为了实现图表实时刷新的目的,防止重复新建插入图表,我在处理图表呈现时采用了“清空元素内容”,再“重新创建图表”的办法,代码如下: ``` function stormFigure() { var time1 = new Date(storm_time_s6a).getTime() var time2 = time1 - 1200000 var time3 = time1 - 5940000 var data1 = generateDayWiseTimeSeries(new Date(time3).getTime(), 100, { min: 30, max: 90 }); var options1 = { chart: { id: "chart2", type: "area", height: 230, foreColor: "#ccc", toolbar: { autoSelected: "pan", show: false } }, colors: ["#00BAEC"], stroke: { width: 3 }, grid: { borderColor: "#555", yaxis: { lines: { show: false } } }, dataLabels: { enabled: true }, fill: { gradient: { enabled: true, opacityFrom: 0.55, opacityTo: 0 } }, markers: { size: 5, colors: ["#000524"], strokeColor: "#00BAEC", strokeWidth: 3 }, series: [ { name: "S6a_flow", data: data1 } ], tooltip: { x:{ show: true, format: 'HH:mm' }, theme: "dark" }, xaxis: { type: "datetime", }, yaxis: { tickAmount: 10, min: 0, max: 250, } }; $("#chart-area").empty(); var chart1 = new ApexCharts(document.querySelector("#chart-area"), options1); chart1.render(); //chart1.updateSeries([{ data: data1 }]); //chart1.updateOptions(null,false,false,false); var options2 = { chart: { id: "chart1", height: 130, type: "bar", foreColor: "#ccc", brush: { target: "chart2", enabled: true }, selection: { fill: { color: "#fff", opacity: 0.4 }, xaxis: { min: time2, max: time1 } } }, colors: ["#FF0080"], series: [ { name: "S6a_flow", data: data1 } ], stroke: { width: 2 }, grid: { borderColor: "#444" }, markers: { size: 0 }, xaxis: { type: "datetime", tooltip: { enabled: false } }, yaxis: { tickAmount: 2, min: 0, max: 200 } }; $("#chart-bar").empty(); var chart2 = new ApexCharts(document.querySelector("#chart-bar"), options2); chart2.render(); } ``` 但是在程序运行后,就出现了上面的折线图不能刷新的情况(重新打开网页可以)。下面的柱状图刷新没有问题。 可以确认的是,数据是没有问题的,我把chart2 options2中的brush.enable置为false后,折线图也可以实时刷新。但是我翻遍了官网,也未能得到brush设置的有效指导。 此问题已困扰我几天,求教各位大神和曾经使用过ApexCharts工具的大神给予指导,不胜感激~
bootstrap bssuggest无法更改下拉框的查询结果
![图片说明](https://img-ask.csdn.net/upload/201708/18/1503046283_675350.png)使用 bootstrap searsh suggest插件,省市区级联查询,代码如下,第一遍是可以的,但是改变省之后,查询市后台的数据是返回对应市下面的数据,但是市的搜索框可选项还是老的,由于插件无法代自定义参数,所以通过click事件来操作。 //查询省 $("#queryProvince").bsSuggest('init', { clearable: true, url: contextPath + "/area/findProvince", idField: "areaUniCode",//每组数据的哪个字段作为 data-id,优先级高于 indexId 设置(推荐) keyField: "areaName2",//每组数据的哪个字段作为输入框内容,优先级高于 indexKey 设置(推荐) effectiveFields: ["areaName2"] //有效显示于列表中的字段,非有效字段都会过滤,默认全部。 }).on('onDataRequestSuccess', function (e, result) {//当 AJAX 请求数据成功时触发,并传回结果到第二个参数 console.log('onDataRequestSuccess: ', result); }).on('onSetSelectValue', function (e, keyword) {//当从下拉菜单选取值时触发,并传回设置的数据到第二个参数 $("#queryAreaUniCode").val(keyword.id); queryAreaUniCode = $("#queryAreaUniCode").val(); paddingArea(1); console.log('onSetSelectValue: ', keyword); }).on('onUnsetSelectValue', function () {//当设置了 dField,且自由输入内容时触发(与背景警告色显示同步) console.log('onUnsetSelectValue'); }); //查询市 $('#queryCity').click(function () { var areaUniCode = $('#queryAreaUniCode').val(); var areaName = $('#queryCity').val().trim(); // $.get(contextPath + "/area/findCity", { areaUniCode: areaUniCode, areaName: areaName }, function (data) { // if (data != null) { var testdataBsSuggest = $("#queryCity").bsSuggest({ clearable: true, url: contextPath + "/area/findCity?areaUniCode="+areaUniCode+"&areaName=",//优先从url ajax 请求 json 帮助数据,注意最后一个参数为关键字keyField请求参数 multiWord: true, //以分隔符号分割的多关键字支持 idField: "areaUniCode",//每组数据的哪个字段作为 data-id,优先级高于 indexId 设置(推荐) keyField: "areaName3",//每组数据的哪个字段作为输入框内容,优先级高于 indexKey 设置(推荐) getDataMethod: 'url',//获取数据的方式,url:一直从url请求;data:从 options.data 获取;firstByUrl:第一次从Url获取全部数据,之后从options.data获取 effectiveFields: ["areaName2","areaName3"],//有效显示于列表中的字段,非有效字段都会过滤,默认全部。 effectiveFieldsAlias: {"areaName2":"省","areaName3":"市"}, // data: { // "value": data.value // } }).on('onDataRequestSuccess', function (e, result) {//当 AJAX 请求数据成功时触发,并传回结果到第二个参数 console.log('onDataRequestSuccess: ', result); }).on('onSetSelectValue', function (e, keyword) {//当从下拉菜单选取值时触发,并传回设置的数据到第二个参数 $("#queryAreaUniCode").val(keyword.id);//设置隐藏域 queryAreaUniCode = $("#queryAreaUniCode").val(); paddingArea(2); console.log('onSetSelectValue: ', keyword); }).on('onUnsetSelectValue', function () {//当设置了 idField,且自由输入内容时触发(与背景警告色显示同步) console.log('onUnsetSelectValue'); }); // } // }); });
jquery dataTable解析后台传回的json报错
JSP: ``` <table class="table table-striped table-hover table-bordered" id="sample_editable_1"> <thead> <tr> <th>实验室名称</th> <th>所属学院</th> <th>分类</th> <th>创建日期</th> <th>创建人</th> <th>编辑</th> <th>删除</th> </tr> </thead> <tbody> </tbody> ``` 前台js: ``` var oTable = $('#sample_editable_1').dataTable({ "aLengthMenu": [ [5, 15, 20, -1], [5, 15, 20, "All"] // change per page values here ], // set the initial value "iDisplayLength": 15, "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>", "sPaginationType": "bootstrap", "oLanguage": { "sLengthMenu": "_MENU_ 每页显示条数", "oPaginate": { "sPrevious": "上一页", "sNext": "下一页" } }, "aoColumns" : [{ "rows" : "labName" },{ "rows" : "academy" }, { "rows" : "category" } , { "rows" : "createTime" } , { "rows" : "createrName" } , { "rows" : "" }, { "rows" : "" }], "bProcessing":false, "bServerSide":true, "sAjaxSource":"/getAllLabInfo", "fnServerData":function ( sSource,aoData, fnCallback) { $.ajax({ url : sSource,//这个就是请求地址对应sAjaxSource data : {"aoData":JSON.stringify(aoData)},//这个是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数 type : 'post', dataType : 'json', async : false, success : function(result) { alert(result.rows[0].labName); fnCallback(result.rows);//把返回的数据传给这个方法就可以了,datatable会自动绑定数据的 }, error : function(msg) { } }); alert(aoData); } }); ``` 后台json: {"total":3,"rows":[{"createTime":"2016-05-12 17:01:30.000000","labName":"物理实验室","id":1,"category":"物理类","academy":"理学院","createrName":"sysadmin"},{"createTime":"2016-05-12 17:01:37.000000","labName":"化学实验室","id":2,"category":"化学类","academy":"理学院","createrName":"sysadmin"},{"createTime":"2016-05-12 17:01:40.000000","labName":"金工实习","id":3,"category":"车床打磨","academy":"主校区","createrName":"sysadmin"}]} 报错: ![图片说明](https://img-ask.csdn.net/upload/201605/12/1463066615_880510.jpg) ![图片说明](https://img-ask.csdn.net/upload/201605/12/1463066664_584182.jpg) 求大神解惑,整了一下午了,再不能只能改用easyui了
easyui搜索框查询回来的数据怎么显示出来啊
1.我现在问题是,在打开页面的时候,调用后台的一个方法,把表格所有的数据 显示在了datagrid上,现在想在页面加个搜索框,输入用户名,点击搜索的时 候,后台会根据前端传来的参数,调用另一个方法执行相关的查询语句,然后把数据返回给前端。 ===问题来了,前端接收到数据后,怎么显示在已经获取了所有数据的在datagrid上呢? 这我相关的代码 ``` <body> <script > $(function (){ var flag ; // 判断新增和修改方法 var url;//全局变量,存储点击对话框保存按钮后,提交请求的URL地址 $('#a').datagrid({ idField:'id',//只要创建数据表格 就必须要加 idField fitColumns:true,//宽度自适应 url:'/ssm/getOperator', //geiOperator会查出表里所有数据 checkOnSelect:true,//为false,当用户仅在点击该复选框的时候才会被选中或取消。 fitColumns: true, columns:[[ {field:'id',checkbox:true}, {field:'operator_id',title:'编号',width:100,halign:'center',align:'center'}, {field:'username',title:'账户',width:100,halign:'center',align:'center'}, {field:'password',title:'密码',width:100,halign:'center',align:'center'}, {field:'operator_name',title:'姓名',width:100,halign:'center',align:'center'} ]], pagination:true,//在底部显示分页 pageSize:'5',//每页显示多少个 pageList:[5,10,20], ``` ``` $('#btn3').click(function(){ var operator_name=document.getElementById('searchbtn').value; var operator={"operator_name":operator_name}; var jsonData= JSON.stringify(operator); $.ajax({ type: 'post' , url: "/ssm/findOperByName" , cache:false , data:jsonData, dataType:'json' , contentType : "application/json;charset=UTF-8", success:function(result){ //1 关闭窗口 /* $('#mydialog').dialog('close'); */ //2刷新datagrid /* $('#a').datagrid('reload'); */ /* $('#a').datagrid('clearSelections'); */ //获取表头数据成功后,使用easyUi的datagrid去生成表格 }, error:function(result){ alert("执行失败"); } }); ``` btn3就是我点击搜索的按钮。但搜索成功后数据不会显示在表格里 如果能解决,可以有偿
web前端动态图表无法刷新数据,请教问题在哪?
# Apexcharts.js中的brush类型图表无法刷新数据 求教各路大神,本人最近在做一个前端开发项目,需要用一张图来展现100个数据,这100个数据是从通过ajax请求从后端接收的,每10秒轮询一次,更新100个数据。 网上找到了开源库apexcharts.js,瞬间被高大上的brush类型图所吸引,引入到我在开发的程序中(网上demo图如下): ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562392234_131426.jpg) 但是出现了下面柱状图数据刷新正常,而上面折线图无法刷新的问题,如下图所示,详细问题描述和代码也在下方,谢谢各位。 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562393740_668680.png) 我根据示例代码和官方网站上的doc进行了修改,并移植到开发的程序中。大致原理是:打开网页——前端按10秒钟轮询方式通过ajax发送请求到后端——后端python程序生成100个数据,通过json格式返回前端——前端更新数据并刷新图表 前端跟后端交互的代码如下 ``` var storm_data_s6a = ""; var strom_time_s6a = ""; $(document).ready(function(){ setInterval(function(){$.ajax({ type:"POST", url:"/sigStorm/", dataType:"json", contentType:"application/json", data:JSON.stringify({"S6a_storm":true,"Cx_storm":true,"Rejcall":true}), success:function(res){ storm_data_s6a = res.S6a_storm; storm_time_s6a = res.storm_time; //alert(storm_data_s6a[15]); stormFigure() } }) },100000); }); ``` 为了实现图表实时刷新的目的,防止重复新建插入图表,我在处理图表呈现时采用了“清空元素内容”,再“重新创建图表”的办法,代码如下: ``` function stormFigure() { var time1 = new Date(storm_time_s6a).getTime() var time2 = time1 - 1200000 var time3 = time1 - 5940000 var data1 = generateDayWiseTimeSeries(new Date(time3).getTime(), 100, { min: 30, max: 90 }); var options1 = { chart: { id: "chart2", type: "area", height: 230, foreColor: "#ccc", toolbar: { autoSelected: "pan", show: false } }, colors: ["#00BAEC"], stroke: { width: 3 }, grid: { borderColor: "#555", yaxis: { lines: { show: false } } }, dataLabels: { enabled: true }, fill: { gradient: { enabled: true, opacityFrom: 0.55, opacityTo: 0 } }, markers: { size: 5, colors: ["#000524"], strokeColor: "#00BAEC", strokeWidth: 3 }, series: [ { name: "S6a_flow", data: data1 } ], tooltip: { x:{ show: true, format: 'HH:mm' }, theme: "dark" }, xaxis: { type: "datetime", }, yaxis: { tickAmount: 10, min: 0, max: 250, } }; $("#chart-area").empty(); var chart1 = new ApexCharts(document.querySelector("#chart-area"), options1); chart1.render(); //chart1.updateSeries([{ data: data1 }]); //chart1.updateOptions(null,false,false,false); var options2 = { chart: { id: "chart1", height: 130, type: "bar", foreColor: "#ccc", brush: { target: "chart2", enabled: true }, selection: { fill: { color: "#fff", opacity: 0.4 }, xaxis: { min: time2, max: time1 } } }, colors: ["#FF0080"], series: [ { name: "S6a_flow", data: data1 } ], stroke: { width: 2 }, grid: { borderColor: "#444" }, markers: { size: 0 }, xaxis: { type: "datetime", tooltip: { enabled: false } }, yaxis: { tickAmount: 2, min: 0, max: 200 } }; $("#chart-bar").empty(); var chart2 = new ApexCharts(document.querySelector("#chart-bar"), options2); chart2.render(); } ``` 但是在程序运行后,就出现了上面的折线图不能刷新的情况(重新打开网页可以)。下面的柱状图刷新没有问题。 可以确认的是,数据是没有问题的,我把chart2 options2中的brush.enable置为false后,折线图也可以实时刷新。但是我翻遍了官网,也未能得到brush设置的有效指导。 此问题已困扰我几天,求教各位大神和曾经使用过ApexCharts工具的大神给予指导,不胜感激~
ajax 调用外部函数,外部函数中的ajax不执行
tab(); function tab() { //alert("name:"+name); $("#table") .bootstrapTable({ url: "scol/player.action", method: 'get', //请求方式(*) toolbar: '#formTools', //工具按钮用哪个容器 striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) queryParams: function(params) { return { offset: params.offset, limit: params.limit, sname: $('#sname').val(), sposi: $('#sposi').val(), roles: $('#roles').val() }; }, pageSize: 4, //每页的记录行数(*) pageNumber: 1, //初始化加载第一页,默认第一页 pageList: [2, 4, 6], singleSelect: false, showColumns: true, sortable: true, //是否启用排序 sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*) strictSearch: true, minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 showRefresh: false, //是否显示刷新按钮 uniqueId: "id", //每一行的唯一标识,一般为主键列 cardView: false, //是否显示详细视图 search: true, strictSearch: true, showColumns: true, showRefresh: true, showExport: true, onLoadError: function(data) { $('#stuinfo').bootstrapTable('removeAll'); }, columns: [{ field: 'id', title: '球员号码' }, { field: 'name', title: '球员姓名' }, { field: 'posi', title: '位置' }, { field: 'cm', title: '身高/CM' }, { field: 'kg', title: '体重/KG' }, { field: 'home', title: '籍贯' }, { field: 'birth', title: '出生日期' }, { field: 'ps', title: '备注' }, /* { field : 'yid', title : '入队时间' }, */ { field: 'year.year', title: '入队时间' }, { title: '状态', field: '', align: 'center', formatter: function(value, row, index) { var s="123"; $.ajax({ url: 'scol/eec.action', type: 'post', data: { pid: row.id }, dataType: 'json', async : false, beforeSend: function(jqXHR, settings) { }, success: function(data3, textStatus) { if(textStatus == "success") { var s1=data3.point[data3.point.length-1]; var s2=data3.point[data3.point.length-2]; if(s1-s2>8){ s="red;'>上升" }else if(s2-s1>8){ s="gray;'>下滑" }else if(s1==null||s2==null) { s="goldenrod;'>未知" } else{ s="lawngreen;'>正常" } } }, error: function(jqXHR, textStatus, errorThrown) { //充当catch(e)的角色 alert("失败!"); } }); var w = "<span style='color:"+s+"</span> "; return w ; } }, { title: '操作', field: '', align: 'center', formatter: function(value, row, index) { var w = '<a href="#" mce_href="#" onclick="detail(\'' + row.id + '\')">详细信息</a> '; var e = '<a href="#" mce_href="#" onclick="edit1(\'' + row.id+'\',\''+row.name+ '\',\'' +row.posi+ '\',\''+row.cm+ '\',\''+row.kg+ '\',\''+row.home+ '\',\''+row.birth + '\',\''+row.ps+ '\',\''+row.yid+ '\',\''+row.tid+ '\')">编辑</a> '; var d = '<a href="#" mce_href="#" onclick="del(\'' + row.id + '\',\''+row.name+'\')">删除</a> '; return w + e + d; } } ], onDblClickRow: function(row, $element) { eechart(row); } }); }; /* 删除 */ function del(pid,pname) { if(confirm("确定删除" + pname + "吗?")){ $.ajax({ url: 'scol/dps.action', type: 'post', data: { pid: pid }, dataType: 'text', /* async : false, */ beforeSend: function(jqXHR, settings) { }, success: function(data3, textStatus) { if(textStatus == "success") { alert("用户删除" + data3); $('#table').bootstrapTable('destroy'); tab(); } }, error: function(jqXHR, textStatus, errorThrown) { //充当catch(e)的角色 alert("删除失败!"); } });} }; ``` ```
bootstraptable-edit使用问题
![图片说明](https://img-ask.csdn.net/upload/201908/06/1565077495_685813.png) 外部的表格无法获取数据,检查contentType属性配置问题。 ``` $(function() { //初始化Table var oTable = new TableInit(); oTable.Init(); }); var TableInit = function() { var oTableInit = new Object(); //初始化Table oTableInit.Init = function() { $('#table').bootstrapTable({ url : 'list',//请求后台的URL(*) method : 'post',//请求方式(*) toolbar : '#toolbar',//工具按钮用哪个容器 striped : true,//是否显示行间隔色 cache : false,//是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination : true,//是否显示分页(*) sortable : false,//是否启用排序 sortOrder : "asc",//排序方式 queryParams : oTableInit.queryParams,//传递参数(*) sidePagination : "server",//分页方式:client客户端分页,server服务端分页(*) pageNumber : 1,//初始化加载第一页,默认第一页 pageSize : 10,//每页的记录行数(*) pageList : [ 10, 25, 50, 100 ],//可供选择的每页的行数(*) search : true,//是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 contentType : "application/x-www-form-urlencoded", strictSearch : true, showColumns : true,//是否显示所有的列 showRefresh : true,//是否显示刷新按钮 minimumCountColumns : 2,//最少允许的列数 clickToSelect : true,//是否启用点击选中行 height : 700,//行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度 uniqueId : "id",//每一行的唯一标识,一般为主键列 showToggle : true,//是否显示详细视图和列表视图的切换按钮 cardView : false,//是否显示详细视图 detailView : false,//是否显示父子表 columns : [ { field : 'id', title : '编号' }, { field : 'name', title : '名字' }, { field : 'price', title : '价格' }, { field : 'operate', title : '操作', formatter : operateFormatter //自定义方法,添加操作按钮 }, ], rowStyle : function(row, index) { var classesArr = [ 'white', 'lightblue' ]; var strclass = ""; if (index % 2 === 0) {//偶数行 strclass = classesArr[0]; } else {//奇数行 strclass = classesArr[1]; } return { classes : strclass }; },//隔行变色 }); }; //得到查询的参数 oTableInit.queryParams = function(params) { var temp = {//这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的 limit : params.limit,//页面大小 //pageNumber: params.pageNumber,//页码 offset : params.offset }; return temp; }; return oTableInit; }; function operateFormatter(value, row, index) {//赋予的参数 return [ '<a href="#" style="color:blue;" οnclick="edit(' + row.id + ')">编辑</a>|', '<a href="#" style="color:red;" οnclick="del(' + row.id + ')">删除</a>', ].join(''); } ``` table-edit.js ``` (function($){ 'use strict'; $.extend($.fn.bootstrapTable.defaults, { editable: false }); var BootstrapTable = $.fn.bootstrapTable.Constructor, _init = BootstrapTable.prototype.init, _initBody = BootstrapTable.prototype.initBody, _onSort = BootstrapTable.prototype.onSort, _append = BootstrapTable.prototype.append, _initHeader = BootstrapTable.prototype.initHeader ; //添加编辑表格默认属性,如何edit设置为false时,表示该列不可编辑 $.extend(true,BootstrapTable.COLUMN_DEFAULTS,{ edit:{ type:'text'//目前只支持 文本:text 下拉:select 日期:date } }); BootstrapTable.prototype.init = function () { _init.apply(this, Array.prototype.slice.apply(arguments)); var that = this; that.prevEditRow = null;//上一次编辑的行 that.columns = {};//列配置信息 that.insertRowVal = {};//新插入行的默认值 that.enableAppend = true;//允许添加新行 if (that.options.editable) { var columnObj = this['getColumns'](); $.each(columnObj,function(i,obj){ $.each(obj,function(z,col){ if(!isNaN(col.fieldIndex) && col.fieldIndex >= 0){ if(col.checkbox)col.edit = false; that.columns['column'+col.fieldIndex] = col; that.insertRowVal[col.field] = ''; } }); }); //this.initEdit(); } }; /*BootstrapTable.prototype.initHeader = function(){ _initHeader.apply(this, Array.prototype.slice.apply(arguments)); this.$container.find('.fixed-table-header').addClass('success'); };*/ BootstrapTable.prototype.initBody = function () { var that = this; _initBody.apply(this, Array.prototype.slice.apply(arguments)); if (!that.options.editable) return; this.initEdit(); //如果列是下拉框,则转换值为对应的文本 $.each(that.columns,function(indx,col){ if(col.edit && col.edit.type == 'select'){ col.edit = $.extend({},$.fn.bootstrapSelect.defaults,col.edit); if(col.edit.data.length > 0){ that.$body.find('>tr').each(function(){ if(that.getData().length < 1)return true; var rowData = that.data[$(this).data('index')];//当前点击td所在行的数据 var $td = $(this).find('td').eq(col.fieldIndex); $.each(col.edit.data,function(i,data){ if(data[col.edit.valueField] == rowData[col.field]){ $td.html(data[col.edit.textField]); } }); }); } else if(col.edit.url){ $.ajax({ url:col.edit.url, type:'post', data:col.edit.paramsType == 'json' ? JSON.stringify(col.edit.params) : col.edit.params, dataType:'json', success: function(jsonLst) { col.edit.onLoadSuccess.call(this,jsonLst); that.$body.find('>tr').each(function(){ if(that.getData().length < 1)return true; var rowData = that.data[$(this).data('index')];//当前点击td所在行的数据 var $td = $(this).find('td').eq(col.fieldIndex); $.each(jsonLst,function(i,data){ if(data[col.edit.valueField] == rowData[col.field]){ $td.html(data[col.edit.textField]); } }); }); col.edit.data = jsonLst; col.edit.url = null; }, error: function(xhr, textStatus, errorThrown){ col.edit.onLoadError.call(this); col.edit.data = []; col.edit.url = null; throw col.field+' 列下拉框数据加载失败'; } }); } } }); }; //根据行号删除指定行 BootstrapTable.prototype.removeRow = function (rowNum) { var that = this; var len = that.options.data.length; if (isNaN(rowNum)){ return; } if(that.$body.find('.editable-select').data('index') != rowNum){ recover(that); } //删除数据 that.options.data.splice(rowNum,1); if (len === that.options.data.length){ return; } var oldClass = {};//保存被标记修改的样式 that.$body.find('>tr').each(function(indx){ if($(this).hasClass('editable-modify')){ if(indx > rowNum){ oldClass[indx-1] = 'editable-modify'; } else{ oldClass[indx] = 'editable-modify'; } } }); //this.prevEditRow = null; //this.$body.find('>tr').removeClass('editable-select'); that.initBody(); //将标记改变过行的样式从新设置回去 for(var key in oldClass){ that.$body.find('>tr').eq(key).addClass(oldClass[key]); } //this.initEdit(); //没有数据时给提示加上样式 if(that.getData().length < 1){ that.$body.find('>tr').addClass('no-records-found'); } }; BootstrapTable.prototype.append = function (){ var that = this; //if(!that.enableAppend)return; var oldClass = {};//保存被标记修改的样式 that.$body.find('>tr').each(function(indx){ if($(this).hasClass('editable-modify') || $(this).hasClass('editable-insert')){ oldClass[indx] = 'editable-modify'; } }); arguments[0] = $.extend({},that.insertRowVal,arguments[0]); _append.apply(this,Array.prototype.slice.apply(arguments)); if (that.options.editable){ //that.initEdit(); setTimeout(function (){ //将标记改变过行的样式从新设置回去 for(var key in oldClass){ that.$body.find('>tr').eq(key).addClass(oldClass[key]); } that.$body.find('>tr:last').addClass('editable-modify'); that.$body.find('>tr:last').addClass('editable-insert');//双重保险,防止在快速点击添加时,为给新增行设置editable-modify属性 that.$body.find('>tr:last').click(); },60); } }; BootstrapTable.prototype.onSort = function () { _onSort.apply(this, Array.prototype.slice.apply(arguments)); var that = this; if (that.options.editable) { this.initEdit(); } }; BootstrapTable.prototype.getData = function () { return (this.searchText || this.searchCallback) ? this.data : this.options.data; }; BootstrapTable.prototype.getColumns = function () { return this.options.columns; }; /** * 获取有被修改过行的值 */ BootstrapTable.prototype.getModiDatas = function (){ var that = this; var datas = []; that.$body.find('.editable-modify').each(function(){ if(that.data[$(this).data('index')]){ datas.push(that.data[$(this).data('index')]); } }); return datas; }; /** * 获取指定列的和,参数为列下标 */ BootstrapTable.prototype.getColTotal = function (num){ var retVal = 0; this.$body.find('>tr').each(function(){ var colNum = 0; if($(this).hasClass('editable-select')){ colNum = $(this).find('td').eq(num).find('input').val(); } else{ colNum = $(this).find('td').eq(num).html(); } if(!isNaN(colNum)){//是数字才做想加 retVal += Number(colNum); } }); return retVal; }; /** * 创建可编辑表格 */ BootstrapTable.prototype.initEdit = function(){ var that = this, data = this.getData(); //this.$body.find('> tr').unbind('click').on('click' //this.$body.delegate('>tr','click' this.$body.find('> tr').unbind('click').on('click',function(){ var $tr = $(this); if($tr.hasClass('editable-select') || data.length < 1 || $tr.hasClass('no-records-found')){ return; } $tr.removeClass('no-records-found'); recover(that); that.prevEditRow = $tr; $tr.addClass('editable-select');//给当前编辑行添加样式,目前样式为空只做标识使用 that.$body.find('> tr').not(this).removeClass('editable-select'); $tr.find('td').closest('td').siblings().html(function(i,html){ initTrClick(that,this); }); }); //鼠标点击事件 $(document).bind('mousedown',function(event){ var $target = $(event.target); if(!($target.parents().andSelf().is(that.$body)) && !($target.parents().andSelf().is($('.datetimepicker')))){ setTimeout(function () { recover(that); //that.prevEditRow = null; //that.$body.find('> tr').removeClass('editable-select'); },10); }; }); }; $.fn.bootstrapTable.methods.push('getColumns', 'getModiDatas','removeRow','getColTotal'); /** * 给tr添加点击事件 */ function initTrClick(that,_this){ that.enableAppend = true; var $td = $(_this); var $tr = $td.parent(); var rowData = that.data[$tr.data('index')];//当前点击td所在行的数据 var tdIndex = $tr.children().index($td);//当前点击的td下标 var tdOpt = that.columns['column'+tdIndex]; if(!tdOpt.edit || typeof tdOpt.edit != 'object'){ return ; } $td.data('field',tdOpt.field); if(!$td.data('oldVal')){ $td.data('oldVal',$.trim(rowData[tdOpt.field])); } var height = $td.innerHeight() - 3; var width = $td.innerWidth() - 2; $td.data('style',$td.attr('style'));//保存原来的样式 $td.attr('style','margin:0px;padding:1px!important;'); var placeholder = ''; if(tdOpt.edit.required == true){ placeholder = '必填项'; } var value = rowData[tdOpt.field] == null || rowData[tdOpt.field] == ''?'':rowData[tdOpt.field]; $td.html('<div style="margin:0;padding:0;overflow:hidden;border:solid 0px red;height:'+(height)+'px;width:'+(width)+'px;">' +'<input type="text" placeholder="'+placeholder+'" value="'+value+'" style="margin-left: 0px; margin-right: 0px; padding-top: 1px; padding-bottom: 1px; width:100%;height:100%">' +'</div>'); $td.width(width); var $input = $td.find('input'); if(!tdOpt.edit.type || tdOpt.edit.type == 'text'){ if(tdOpt.edit['click'] && typeof tdOpt.edit['click'] === 'function'){ $input.unbind('click').bind('click',function(event){ tdOpt.edit['click'].call(this,event); }); } if(tdOpt.edit['focus'] && typeof tdOpt.edit['focus'] === 'function'){ $input.unbind('focus').bind('focus',function(event){ tdOpt.edit['focus'].call(this,event); }); } $input.unbind('blur').on('blur',function(event){ if(tdOpt.edit['blur'] && typeof tdOpt.edit['blur'] === 'function'){ tdOpt.edit['blur'].call(this,event); } }); } else if(tdOpt.edit.type == 'select'){ $input.bootstrapSelect(tdOpt.edit); } else if(tdOpt.edit.type == 'date'){ $td.html('<div style="margin:0;padding:0;overflow:hidden;border:solid 0px red;height:'+(height)+'px;width:'+(width)+'px;" class="input-group date form_datetime" data-link-field="dtp_editable_input">' +'<input class="form-control" type="text" value="'+value+'">' +'<span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>' +'</div>' +'<input type="hidden" id="dtp_editable_input" value="'+value+'"/>' ); that.$body.find('.form_datetime').datetimepicker({ weekStart: 1, todayBtn: 1, autoclose: 1, todayHighlight: 1, startView: 2, forceParse: 0, language:'zh-CN', format: 'yyyy-mm-dd hh:ii:ss', pickerPosition: 'bottom-left', showMeridian: 1 }); } } /** * 恢复tr,使之处于不可编辑状态 */ function recover(that){ var isModi = false;//判断行值是否变动过 if(that.prevEditRow != null){ that.prevEditRow.find('td').closest('td').siblings().html(function(i,html){ $(this).attr('style',$(this).data('style')); var textVal = $(this).find('input[type="text"]').val(); var hiddenVal = $(this).find('input[type="hidden"]').val(); if(typeof $(this).find('input[type="text"]').bootstrapSelect('getText') != 'object'){ $(this).find('input[type="text"]').bootstrapSelect('destroy'); } if(textVal != undefined){ if($(this).data('oldVal') != (hiddenVal?hiddenVal:$.trim(textVal)) && $(this).data('field')) { that.data[that.prevEditRow.data('index')][$(this).data('field')] = hiddenVal?hiddenVal:$.trim(textVal); isModi = true; } if(that.columns['column'+i].edit.required == true){ if(textVal == null || textVal == ''){ that.enableAppend = false; return '<span style="color:red;">必填项不能为空</span>'; } } return $.trim(textVal); } }); //新值跟旧值不匹配证明被改过 if(isModi || that.prevEditRow.hasClass('editable-insert')){ that.prevEditRow.addClass('editable-modify'); } else{ that.prevEditRow.removeClass('editable-modify'); } that.prevEditRow = null; that.$body.find('> tr').removeClass('editable-select'); } } })(jQuery); ``` 哪位大神能帮忙解决下
python爬取ashx页面的post请求
我以一个类似的情况来提问,也是论坛中有个网友1年前提出的问题,但是他没有写出后续.... 网页地址:http://www.lzggzyjy.cn/InfoPage/InfoList.aspx?SiteItem=8 需求:python post请求获取该页面(感觉很简单) 分析页面: ![图片说明](https://img-ask.csdn.net/upload/201803/18/1521356034_57752.png) ![图片说明](https://img-ask.csdn.net/upload/201803/18/1521356049_933670.png) 我把代码贴上来: ``` #! /usr/bin/env python3 # -*- coding:utf-8 –*- import requests import json import sys reload(sys) sys.setdefaultencoding('utf-8') def testDownloadLanZhou(): testUrl = 'http://www.lzggzyjy.cn/ajax/Controls_InfoListControl,App_Web_2ewqtbev.ashx?_method=getCurrentData&_session=rw' testHeaders = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36', 'Host':'www.lzggzyjy.cn', 'Referer':'http://www.lzggzyjy.cn/InfoPage/InfoList.aspx?SiteItem=8', 'X-Requested-With':'XMLHttpRequest', # "Content-Type":'text/plain;charset=UTF-8', "Cookie":'ASP.NET_SessionId=hcdc1tywt5dgszd5bziox4sc; SERVERID=b925605187c7d5d37f1395627a969c75|1521298751|1521298681' } # testParams = {'_method':'getCurrentData', '_session':'rw'} testData = {'currentPage':'1', 'Query':''} # 将dic 转换成json字符串 # jsonDataString = json.dumps(testData) # print(jsonDataString) # print(type(jsonDataString)) # # 对应每个参数添加换行隔开 # newString = jsonDataString.replace(',', '\n') # print(newString) resq = requests.post(testUrl, headers=testHeaders, data=testData) print(resq.content) ``` 这个请求怎么弄都不对,获取不到正确的html页面......请各位指点迷津
ssh 实体对象转jason 前台无法显示
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <%@ include file="/public/head.jspf" %> <style type="text/css"> body { margin: 1px; } .searchbox { margin: -3; } </style> <script type="text/javascript"> $(function(){ $('#dg').datagrid({ //url地址改为请求categoryAction url:'forder_queryJoinUser.action', loadMsg:'Loading......', queryParams:{username:''}, fitColumns:true,//水平自动展开,如果设置此属性,则不会有水平滚动条,演示冻结列时,该参数不要设置 striped:true, //当数据多的时候不换行 nowrap:true, singleSelect:false, //如果为真,只允许单行显示,全显功能失效 //设置分页 pagination:true, //设置每页显示的记录数 pageSize:10, //设置可选的每页记录数,供用户选择,默认是10,20,30,40... pageList:[5,10,15,20], idField:'id',//指定id为标识字段,在删除,更新的时候有用,如果配置此字段,在翻页时,换页不会影响选中的项 toolbar: [{ iconCls: 'icon-edit', text:'更新订单', handler: function(){ //判断是否有选中行记录,使用getSelections获取选中的所有行 var rows = $("#dg").datagrid("getSelections"); if(rows.length == 0) { //弹出提示信息 $.messager.show({ //语法类似于java中的静态方法,直接对象调用 title:'错误提示', msg:'至少要选择一条记录', timeout:2000, showType:'slide', }); }else if(rows.length != 1) { //弹出提示信息 $.messager.show({ //语法类似于java中的静态方法,直接对象调用 title:'错误提示', msg:'每次只能更新一条记录', timeout:2000, showType:'slide', }); } else{ //弹出更新的页面 parent.$("#win").window({ title:"更新订单", width:350, height:250, content:'<iframe src="send_order_update.action" frameborder="0" width="100%" height="100%"/>' }); } } },'-',{ iconCls: 'icon-remove', text:'删除订单', handler: function(){ //判断是否有选中行记录,使用getSelections获取选中的所有行 var rows = $("#dg").datagrid("getSelections"); //返回被选中的行,如果没有任何行被选中,则返回空数组 if(rows.length == 0) { //弹出提示信息 $.messager.show({ title:'错误提示', msg:'至少要选择一条记录', timeout:2000, showType:'slide', }); } else { //提示是否确认删除,如果确认则执行删除的逻辑 $.messager.confirm('删除的确认对话框', '您确定要删除此项吗?', function(r){ if (r){ //1. 从获取的记录中获取相应的的id,拼接id的值,然后发送后台1,2,3,4 var ids = ""; for(var i = 0; i < rows.length; i ++) { ids += rows[i].id + ","; } ids = ids.substr(0, ids.lastIndexOf(",")); //2. 发送ajax请求 $.post("forder_deleteByIds.action",{ids:ids},function(result){ if(result == "true") { //将刚刚选中的记录删除,要不然会影响后面更新的操作 $("#dg").datagrid("uncheckAll"); //刷新当前页,查询的时候我们用的是load,刷新第一页,reload是刷新当前页 $("#dg").datagrid("reload");//不带参数默认为上面的queryParams } else { $.messager.show({ title:'删除异常', msg:'删除失败,请检查操作', timeout:2000, showType:'slide', }); } },"text"); } }); } } },'-',{ //查询按钮不是LinkButton,它有语法,但是也支持解析HTML标签 text:"<input id='ss' name='serach' />" }], rowStyler: function(index,row){ console.info("index" + index + "," + row) if(index % 2 == 0) { return 'background-color:#fff;'; } else { return 'background-color:#c4e1e1;'; } }, //同列属性,但是这些列将会冻结在左侧,大小不会改变,当宽度大于250时,会显示滚动条,但是冻结的列不在滚动条内 frozenColumns:[[ {field:'checkbox',checkbox:true}, {field:'id',title:'编号',width:60} ]], columns:[[ {field:'name',title:'收货人姓名',width:80}, {field:'phone',title:'收货人电话',width:100}, {field:'remark',title:'买家留言',width:100}, {field:'date',title:'创建日期',width:100}, {field:'total',title:'订单总价',width:100}, {field:'address',title:'收货地址',width:150}, {field:'user.id',title:'买家id',width:60}, {field:'user.login',title:'买家登录名',width:80}, {field:'status.status',title:'订单状态',width:100} ]] }); //把普通的文本框转化为查询搜索文本框 $('#ss').searchbox({ //触发查询事件 searcher:function(value,username){ //value表示输入的值 //获取当前查询的关键字,通过DataGrid加载相应的信息,使用load加载和显示第一页的所有行。 //如果指定了参数,它将取代'queryParams'属性。通常可以通过传递一些参数执行一次查询,通过调用这个方法会向上面url指定的action去发送请求,从服务器加载新数据。 $('#dg').datagrid('load',{ username: value }); }, prompt:'请输入搜索关键字' }); }); </script> </head> <body> <table id="dg"></table> </body> </html> `jsp代码 下面action: public String queryJoinUser() { // 用来存储分页的数据 pageMap = new HashMap<String, Object>(); System.out.println(username); // 根据关键字和分页的参数查询相应的数据 List<Forder> forderList = forderService.queryJoinUser(username, page, rows); pageMap.put("\"rows\"", forderList); pageMap.put("\"total\"", forderService.getCount(username)); System.out.println(pageMap); return "jsonMap"; } struts.xml <action name="forder_*" class="forderAction" method="{1}"> <result name="jsonMap" type="json"> <param name="root">pageMap</param> <param name="excludeProperties"> rows\[\d+\]\.post, rows\[\d+\]\.user\.pass, rows\[\d+\]\.user\.sex, rows\[\d+\]\.user\.phone, rows\[\d+\]\.user\.email, rows\[\d+\]\.status\.id </param> </result> <result name="bank"> /user/bank.jsp </result> </action> 执行后pageMap的输出: {"total"=1, "rows"=[Forder [id=1, name=张小, phone=1851663595, remark=是否被, date=null, total=14.00, post=4325232, addressrk=, date=null, total=100.00, post=dcvdf, address=市场v吃饭的]]} `` 没有报任何错误就是不显示![图片说明](https://img-ask.csdn.net/upload/201706/07/1496767475_187876.png) ``` ``` ```
学习ztree遇到TypeError: tId is undefined,跪求大神
``` <!DOCTYPE html> <HTML> <HEAD> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="@routes.Assets.at("stylesheets/css/zTreeStyle/zTreeStyle.css")" type="text/css"> <script src="@routes.Assets.at("javascripts/jquery-1.9.0.min.js")" type="text/javascript"></script> <script type="text/javascript" src="@routes.Assets.at("javascripts/js/jquery.ztree.core-3.5.js")"></script> <SCRIPT type="text/javascript"> var zNodes; var setting = { data: { simpleData: { enable: true, idKey:"id", pIdKey:"pId", rootPId:0 } }, showLine : true, //是否显示节点间的连线 checkable : true //每个节点上是否显示 CheckBox }; $(document).ready(function(){ $.ajax({ async : false, cache:false, type: 'GET', dataType : "json", url: "/Application/getData",//请求的action路径 error: function () {//请求失败处理函数 alert('请求失败'); }, success:function(data){ //请求成功后处理函数。 alert(data); zNodes = data; //把后台封装好的简单Json格式赋给treeNodes } }); $.fn.zTree.init($("#treeDemo"), setting, eval(zNodes)); }); </SCRIPT> </HEAD> <BODY> <div class="content_wrap"> <div class="zTreeDemoBackground left"> <ul id="treeDemo" class="ztree"></ul> </div> </div> </BODY> </HTML> ``` 下面是Java部分代码: ``` public static Result getData() { String s1 = "{id:1, pId:0, name:\"test1\" , open:true}"; String s2 = "{id:2, pId:1, name:\"test2\" , open:true}"; String s3 = "{id:3, pId:1, name:\"test3\" , open:true}"; String s4 = "{id:4, pId:2, name:\"test4\" , open:true}"; List<String> lstTree = new ArrayList<String>(); lstTree.add(s1); lstTree.add(s2); lstTree.add(s3); lstTree.add(s4); return ok(Json.toJson(lstTree)); } ``` 下面是JSON返回的数据: ![ajax返回的数据](https://img-ask.csdn.net/upload/201511/23/1448266727_781564.png) 所用框架是play framework,求大神解惑,为什么会出现TypeError: tId is undefined的错误呢? # ![出现的错误](https://img-ask.csdn.net/upload/201511/23/1448266896_502181.png)
获得select中option的value值
``` request.getParameter("");获得selsct中option的value值 下拉框<option>由getdataset()初始化,用下拉框选择某个option后,datasetpath = request.getParameter("");怎么获得<option>中的value值(路径),option有多个每个都有对应的value ``` 。![图片说明](https://img-ask.csdn.net/upload/201804/07/1523074392_447307.png) 下拉框部分: ``` div class="col-xs-3"> select class="form-control" name="select_dataset" id="select_dataset" </select </div 初始化函数 function getdatasets(){ $.ajax({ type : "POST", url:"<%=contextPath%>/getDatasets", data : { type : "0", testname : "自动分类", }, dataType : "json", async : false, context : null, success : function(jsonData) { if (jsonData && jsonData != '[]') { //下拉菜单选项显示数据库名,值为数据库的真实地址 var dataList = jsonData; var select_dataset = $("#select_dataset"); select_dataset.html(''); var inner = ""; for(var i = 0; i<dataList.length; i++){ var a=0; for(j=0;j<=i;j++){ if(dataList[i].dataset==dataList[j].dataset) a++; else continue; } if(a<=1) inner += "<option value= '"+dataList[i].datasetpath +"'>" + dataList[i].dataset + "</option>"; else continue; //inner += "<option value='" + dataList.get(i).getDatasetPath() +"'>" + dataList.get(i).getDataset() + "</option>"; } $("#select_dataset").append(inner); } } }); } 请求: if(isupload == 1){ datasetpath = request.getParameter("select_dataset"); } ```
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
前后端分离后,维护接口文档基本上是必不可少的工作。 一个理想的状态是设计好后,接口文档发给前端和后端,大伙按照既定的规则各自开发,开发好了对接上了就可以上线了。当然这是一种非常理想的状态,实际开发中却很少遇到这样的情况,接口总是在不断的变化之中,有变化就要去维护,做过的小伙伴都知道这件事有多么头大!还好,有一些工具可以减轻我们的工作量,Swagger2 就是其中之一,至于其他类似功能但是却收费的软...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
天天学JAVA-JAVA基础(6)
如果觉得我写的还行,请关注我的博客并且点个赞哟。本文主要介绍JAVA 中最常使用字符串常量String相关知识。 1.String简介 2.创建字符串对象两种方式的区别 3.String常用的方法 4.String的不可变性 5.一道阿里面试题,你会做吗? 1.String简介 1.1String源码 首先看一段String源码,String主要实现了Serializable、Compar...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
2020 网络课 智慧树自动刷课代码,自动跳转,自动答题并关闭弹窗,自动1.5倍速静音
刷课一时爽,一直刷课一直爽! 终于让我找到了这个黑客代码了,教程开始: 只限谷歌浏览器和火狐浏览器使用,如果第一次失败,请重新试一下次 将下面代码复制后,进入浏览器按F12键,先点击console 然后Ctrl+v复制代码 最后按回车键即可 var ti = $("body"); var video = $(".catalogue_ul1 li[id*=video-]"); var i = 1;...
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
羞,Java 字符串拼接竟然有这么多姿势
二哥,我今年大二,看你分享的《阿里巴巴 Java 开发手册》上有一段内容说:“循环体内,拼接字符串最好使用 StringBuilder 的 append 方法,而不是 + 号操作符。”到底为什么啊,我平常一直就用的‘+’号操作符啊!二哥有空的时候能否写一篇文章分析一下呢? 就在昨天,一位叫小菜的读者微信我说了上面这段话。 我当时看到这条微信的第一感觉是:小菜你也太菜了吧,这都不知道为啥啊!我估...
写1行代码影响1000000000人,这是个什么项目?
不带钱不带卡,只带手机出门就能畅行无阻,这已是生活的常态。益普索发布的《2019第一季度第三方移动支付用户研究》报告显示,移动支付在手机网民中的渗透率高达95.1%,截至今年1月,支付宝全球用户数已经突破10亿。你或许每天都会打开支付宝,付款购物、领取权益、享受服务……但你或许不知道的是,在这个方便、快捷、智能化的APP背后,有一群年轻的技术人,用智慧和创新让它每天都变得更“聪明”一点。 ...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
一点一滴记录 Java 8 stream 的使用
日常用到,一点一滴记录,不断丰富,知识积累,塑造自身价值。欢迎收藏 String 转 List String str = 1,2,3,4; List&lt;Long&gt; lists = Arrays.stream(str.split(",")).map(s -&gt; Long.parseLong(s.trim())).collect(Collectors.toList()); Lis...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问