qq_32259579的博客 - 钱柜娱乐开户 http://static.blog.csdn.net/images/logo.gif /qq_32259579 zh-cn 5 2018-01-17T03:30:55.1273343+08:00 qq_32259579的博客 - 钱柜娱乐开户 /qq_32259579/article/details/78994326 /qq_32259579/article/details/78994326 qq_32259579 2018-01-07T13:36:20 准备工作

Fiddler v5.0.20173.50948

step1:

点击Tools->选择HTTPS

点击图中的4选择export Root Ceratificate to Desktop, 这样Fiddler生成的证书就会导入到桌面上。

step2:

之后选择Connections。复选四个框框,见明知意。1.捕获ftp请求、2.允许远程设备链接并捕获其请求数据(手机导入Fiddler的CA证书时,这一步是必须的步骤,因此在这里我们提前勾选上)、3/4.分别是重用客户端服务端请求。

------------------------------------------------------------------------------------------

到此为止Fiddler端配置完成。

而现在大家可能会遇见有一个问题即所有的浏览器都不能正常访问Internet。究其原因是:Fiddler的证书此时是不被所有浏览器信任的。解决方案:

拿火狐举例:

点击查看证书,选择导入

导入step1中生成到桌面上的Fiddler.cer证书即可,之后点击确定即可解决浏览器不能访问的问题。

其他浏览器相同的解决思路....不在赘述

----------------------------------------------------------------------------

step3

需求: 手机请求的数据通过Fiddler要能看得到所有请求的详情

方案: 把step1中生成的证书通过qq也好、数据线也好传送到手机的sd卡内;然后进入手机的sd找到发送过来的fiddlerRooty.cer(默认是这个名).点击进行安装即可

在自己的笔记本上开个热点,然后用手机连接该热点。注意手机要进行配置


此时Fiddler可以抓取手机端的数据了

重启Fiddler、手机重启wlan。测试连接成功。顺利抓取微信的数据包

作者:qq_32259579发表于2018/1/7 13:36:20 原文链接
阅读:290评论:0查看评论
]]>
qq_32259579的博客 - 钱柜娱乐开户 /qq_32259579/article/details/78952121 /qq_32259579/article/details/78952121 qq_32259579 2018-01-02T15:13:35 pycharm是很强大的开发工具,但是每次注册着实让人头疼。网络上很多注册码、注册服务器等等、但都只是一年或者不能用;为次有如下解决方案。亲测有效!!!

如果想让pycharm永久被激活,比如截止日到2099-01-01;这应该算是永久激活了吧;哈哈哈


step1:

下载jar包: 此jar包的目的就是让截获截止时间并骗过pycharm;

密码:  53k4

点击下载 


step2:

下载完毕后, 将其放入pycharm在你本地的安装目录bin下。

并且修改两个以 vmoptions为结尾的启动文件如图所示:



并且在两个文件后追加       -javaagent:D:\devApp\PyCharm 2017.3.2\bin\JetbrainsCrack-2.6.10-release-enc.jar      

// 注意:标红处是你自己的安装目录



step3:

重启idea
注意!如果之前已经存在注册码,可以直接跳到第4步,如果没有注册码,则填写下面的注册码!

BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiQUMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IklJIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJSQyIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IlBTIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiREMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9XSwiaGFzaCI6IjQ3NzU1MTcvMCIsImdyYWNlUGVyaW9kRGF5cyI6MCwiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-iygsIMXTVeSyYkUxAqpHmymrgwN5InkOfeRhhPIPa88FO9FRuZosIBTY18tflChACznk3qferT7iMGKm7pumDTR4FbVVlK/3n1ER0eMKu2NcaXb7m10xT6kLW1Xb3LtuZEnuis5pYuEwT1zR7GskeNWdYZ0dAJpNDLFrqPyAPo5s1KLDHKpw+VfVd4uf7RMjOIzuJhAAYAG+amyivQt61I9aYiwpHQvUphvTwi0X0qL/oDJHAQbIv4Qwscyo4aYZJBKutYioZH9rgOP6Yw/sCltpoPWlJtDOcw/iEWYiCVG1pH9AWjCYXZ9AbbEBOWV71IQr5VWrsqFZ7cg7hLEJ3A==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9


step4: 验证是否是有效期是否截止到2099年    点击 pycharm的help->about查看:





教程到此为止, 欢迎好评、点赞

作者:qq_32259579发表于2018/1/2 15:13:35 原文链接
阅读:7139评论:10查看评论
]]>
qq_32259579的博客 - 钱柜娱乐开户 /qq_32259579/article/details/77936480 /qq_32259579/article/details/77936480 qq_32259579 2017-09-11T18:50:37             DISTINCT(xd_user.user_name)
        from xd_resource_list
            LEFT JOIN xd_course_product
                on xd_resource_list.forum_tag = xd_course_product.course_code
                    LEFT JOIN xd_course_product_order_record
                        on xd_course_product_order_record.product_id = xd_course_product.id
                            LEFT JOIN xd_user
                                on xd_user.id = xd_course_product_order_record.uid
        where to_days(xd_resource_list.create_time) = to_days(now());
作者:qq_32259579发表于2017/9/11 18:50:37 原文链接
阅读:280评论:0查看评论
]]>
qq_32259579的博客 - 钱柜娱乐开户 /qq_32259579/article/details/73647754 /qq_32259579/article/details/73647754 qq_32259579 2017-06-23T14:47:14 在Nodejs中, js文件和js文件之间有两种合作的方式 1). 某一个js文件中, 提供了一部分函数, 供别人使用 只需要暴漏函数就行了; exports.mag = msg; 2). 某一个js文件,描述了一个类, module.exports = People; package.json要放在模块的根目录下
作者:qq_32259579发表于2017/6/23 14:47:14 原文链接
阅读:349评论:0查看评论
]]>
qq_32259579的博客 - 钱柜娱乐开户 /qq_32259579/article/details/73605531 /qq_32259579/article/details/73605531 qq_32259579 2017-06-22T16:08:52 nodejs借助于node运行环境而实现的一个比较灵巧的前后一体化的开发环境,随比不了php,python,但是在快速开发维护的时间成本上,node一骑绝尘。node自身由衷的想法,花最小的硬件成本,追求更高的并发,更高的处理性能。

nodejs是一个让javascript运行在服务端的开发平台,它让javascript的触角伸到了服务器,可以与php,jsp,python,ruby平起平坐


node的与众不同之处:

1.node.js不是一门独立的语言,与php,jsp,python, perl,ruby的"既是语言,也是平台"不同,node.js的使用javascript进行编程,运行在chrom的v8引擎之上。它自己不用建设在任何的服务器软件之上。


node特点:

1.单线程

2.非阻塞

3.事件驱动

首先,node不为每一个用户开辟一个线程,所以非常极端的选择了单线程。单线程,要照顾好所有的用户,那么就必须有非阻塞I/O,否则一个人的I/O就把别人,自己的都给阻塞了。一旦有了非阻塞的I/O,一个人如果I/O去了,就会放弃CPU的使用权,换成另一个人使用CPU(或者执行此人后面的语句)。所以CPU的利用率100%。第一个人I/O结束了,就要用事件来通知线程,执行回调函数。此时必须有事件环,就有一个人排队调度机制。Node中有超过半数的C++代码,在搭建事件环


nodejs适合做:

大量的/并发的、网络,文件 I/O

例如,表单提交、考试系统,聊天室,图文直播


不适合做:

由于nodejs善于io不善于计算,复杂的业务逻辑运算



nodejs中回调是优美的实现,这句话没错,但总有些时候我们不想因为异步回调而产生一些不必要的麻烦

存在的问题:

/**
 * 需求是遍历某文件夹,只遍历一级(文件或文件夹)中的文件夹,并打印到控制台
 */
let fs = require("fs");
let http = require("http");

// 1.模拟本地服务器
let server = http.createServer(function(req, res){
    // 2.规避调由chrome浏览器收藏夹发起的访问的请求
    if(req.url == '/favicon.ico'){
        return;
    }
    
    // 3.读取一个文件夹
    fs.readdir('./album', function(err, files){
        // 4.声明一个空数组来存放所有的子文件夹
        let folderArray = [];


        // 此处的就是因为nodejs的回调'太过于无处不在'导致会出现局部变量污染的问题,
        // 分析如下: 
        // 假设files[0]='folder1',
        // 试着想一下由于是异步回调,当第一个for循环走完,获取if中的判断还没有执行到,
        // 紧接着for走到第二次循环此时files[2]='a.txt',此时if判断恰巧执行到,
        // 试问此时的folderArray.push(files[i]);就不是'folder1',而是'a.txt'
        // 于是问题就出现了!
        for(var i = 0; i < files.length; i ++){
            fs.stat('./album/' + files[i], function(err, stats){
                if(stats.isDirectory()){
                    folderArray.push(files[i]);
                }
                console.log(folderArray);
            });
        }
        console.log(folderArray);
    });
    
    res.end();

}).listen(3000, '127.0.0.1');



纠正方案

/**
 * 需求是遍历某文件夹,只遍历一级(文件或文件夹)中的文件夹,并打印到控制台
 */
let fs = require("fs");
let http = require("http");

// 1.模拟本地服务器
let server = http.createServer(function(req, res){
    // 2.规避调由chrome浏览器收藏夹发起的访问的请求
    if(req.url == '/favicon.ico'){
        return;
    }
    
    // 3.读取一个文件夹
    fs.readdir('./album', function(err, files){
        // 4.声明一个空数组来存放所有的子文件夹
        let folderArray = [];

        /**
         * 牛x的地方在这里出现,强行将同步变成异步
         *    -- 自己定义一个函数并且使之立即执行(function method(args){...})(args)
         */
        (function iterator(i){
            // 5.控制数组下标不越界
            if(i == files.length){
	        // 6.输出满足条件的文件夹
	        console.log(folderArray);
                return;
            }
            // 7.对files中的元素开始逐一遍历
            fs.stat('./album/' + files[i], function(err, stats){
                // 8.如果是文件夹则就放入上面预定义的数组内
                if(stats.isDirectory()){
                    folderArray.push(files[i]);
                }
                // 9. 此处是关键点,也正是这里才是强制同步遍历
                iterator(i + 1);
            });
        })(0);

    });
    res.end();

}).listen(3000, '127.0.0.1');




这种问题在读数据库时一定要格外注意!!!

作者:qq_32259579发表于2017/6/22 16:08:52 原文链接
阅读:372评论:0查看评论
]]>
qq_32259579的博客 - 钱柜娱乐开户 /qq_32259579/article/details/73589612 /qq_32259579/article/details/73589612 qq_32259579 2017-06-22T12:49:38 /** * Created by zhaodan on 16/10/10 * * ********* 操作实例 ************** * var map = new HashMap(); * map.put("key1","Value1"); * map.put("key2","Value2"); * map.put("key3","Value3"); * map.put("key4","Value4"); * map.put("key5","Value5"); * alert("size:"+map.size()+" key1:"+map.get("key1")); * map.remove("key1"); * map.put("key3","newValue"); * var values = map.values(); * for(var i in values){ * document.write(i+":"+values[i]+" "); * } * document.write("<br>"); * var keySet = map.keySet(); * for(var i in keySet){ * document.write(i+":"+keySet[i]+" "); * } * alert(map.isEmpty()); */ function HashMap() { //定义长度 var length = 0; //创建一个对象 var obj = new Object(); /** * 判断Map是否为空 */ this.isEmpty = function () { return length == 0; }; /** * 判断对象中是否包含给定Key */ this.containsKey = function (key) { return (key in obj); }; /** * 判断对象中是否包含给定的Value */ this.containsValue = function (value) { for (var key in obj) { if (obj[key] == value) { return true; } } return false; }; /** *向map中添加数据 */ this.put = function (key, value) { if (!this.containsKey(key)) { length++; } obj[key] = value; }; /** * 根据给定的Key获得Value */ this.get = function (key) { return this.containsKey(key) ? obj[key] : null; }; /** * 根据给定的Key删除一个值 */ this.remove = function (key) { if (this.containsKey(key) && (delete obj[key])) { length--; } }; /** * 获得Map中的所有Value */ this.values = function () { var _values = new Array(); for (var key in obj) { _values.push(obj[key]); } return _values; }; /** * 获得Map中的所有Key */ this.keySet = function () { var _keys = new Array(); for (var key in obj) { _keys.push(key); } return _keys; }; /** * 获得Map的长度 */ this.size = function () { return length; }; /** * 清空Map */ this.clear = function () { length = 0; obj = new Object(); }; } exports.newHashMap = function () { return new HashMap(); }
作者:qq_32259579发表于2017/6/22 12:49:38 原文链接
阅读:277评论:0查看评论
]]>
qq_32259579的博客 - 钱柜娱乐开户 /qq_32259579/article/details/73572974 /qq_32259579/article/details/73572974 qq_32259579 2017-06-22T12:03:43 // 清除两边的空格 String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ''); }; // 合并多个空白为一个空白 String.prototype.ResetBlank = function() { var regEx = /\s+/g; return this.replace(regEx, ' '); }; // 保留数字 String.prototype.GetNum = function() { var regEx = /[^\d]/g; return this.replace(regEx, ''); }; // 保留中文 String.prototype.GetCN = function() { var regEx = /[^\u4e00-\u9fa5\uf900-\ufa2d]/g; return this.replace(regEx, ''); }; // String转化为Number String.prototype.ToInt = function() { return isNaN(parseInt(this)) ? this.toString() : parseInt(this); }; // 得到字节长度 String.prototype.GetLen = function() { var regEx = /^[\u4e00-\u9fa5\uf900-\ufa2d]+$/; if (regEx.test(this)) { return this.length * 2; } else { var oMatches = this.match(/[\x00-\xff]/g); var oLength = this.length * 2 - oMatches.length; return oLength; } }; // 获取文件全名 String.prototype.GetFileName = function() { var regEx = /^.*\/([^\/\?]*).*$/; return this.replace(regEx, '$1'); }; // 获取文件扩展名 String.prototype.GetExtensionName = function() { var regEx = /^.*\/[^\/]*(\.[^\.\?]*).*$/; return this.replace(regEx, '$1'); }; //替换所有 String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) { if (!RegExp.prototype.isPrototypeOf(reallyDo)) { return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi" : "g")), replaceWith); } else { return this.replace(reallyDo, replaceWith); } }; //格式化字符串 add By 刘景宁 2010-12-09 String.Format = function() { if (arguments.length == 0) { return ''; } if (arguments.length == 1) { return arguments[0]; } var reg = /{(\d+)?}/g; var args = arguments; var result = arguments[0].replace(reg, function($0, $1) { return args[parseInt($1) + 1]; }); return result; }; // 数字补零 Number.prototype.LenWithZero = function(oCount) { var strText = this.toString(); while (strText.length < oCount) { strText = '0' + strText; } return strText; }; // Unicode还原 Number.prototype.ChrW = function() { return String.fromCharCode(this); }; // 数字数组由小到大排序 Array.prototype.Min2Max = function() { var oValue; for (var i = 0; i < this.length; i++) { for (var j = 0; j <= i; j++) { if (this[i] < this[j]) { oValue = this[i]; this[i] = this[j]; this[j] = oValue; } } } return this; }; // 数字数组由大到小排序 Array.prototype.Max2Min = function() { var oValue; for (var i = 0; i < this.length; i++) { for (var j = 0; j <= i; j++) { if (this[i] > this[j]) { oValue = this[i]; this[i] = this[j]; this[j] = oValue; } } } return this; }; // 获得数字数组中最大项 Array.prototype.GetMax = function() { var oValue = 0; for (var i = 0; i < this.length; i++) { if (this[i] > oValue) { oValue = this[i]; } } return oValue; }; // 获得数字数组中最小项 Array.prototype.GetMin = function() { var oValue = 0; for (var i = 0; i < this.length; i++) { if (this[i] < oValue) { oValue = this[i]; } } return oValue; }; // 获取当前时间的中文形式 Date.prototype.GetCNDate = function() { var oDateText = ''; oDateText += this.getFullYear().LenWithZero(4) + new Number(24180).ChrW(); oDateText += this.getMonth().LenWithZero(2) + new Number(26376).ChrW(); oDateText += this.getDate().LenWithZero(2) + new Number(26085).ChrW(); oDateText += this.getHours().LenWithZero(2) + new Number(26102).ChrW(); oDateText += this.getMinutes().LenWithZero(2) + new Number(20998).ChrW(); oDateText += this.getSeconds().LenWithZero(2) + new Number(31186).ChrW(); oDateText += new Number(32).ChrW() + new Number(32).ChrW() + new Number(26143).ChrW() + new Number(26399).ChrW() + new String('26085199682010819977222352011620845').substr(this.getDay() * 5, 5).ToInt().ChrW(); return oDateText; }; //扩展Date格式化 Date.prototype.Format = function(format) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时 "H+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; var week = { "0": "\u65e5", "1": "\u4e00", "2": "\u4e8c", "3": "\u4e09", "4": "\u56db", "5": "\u4e94", "6": "\u516d" }; if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); } if (/(E+)/.test(format)) { format = format.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468") : "") + week[this.getDay() + ""]); } for (var k in o) { if (new RegExp("(" + k + ")").test(format)) { format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); } } return format; } Date.prototype.Diff = function(interval, objDate) { //若参数不足或 objDate 不是日期类型則回传 undefined if (arguments.length < 2 || objDate.constructor != Date) { return undefined; } switch (interval) { //计算秒差 case 's': return parseInt((objDate - this) / 1000); //计算分差 case 'n': return parseInt((objDate - this) / 60000); //计算時差 case 'h': return parseInt((objDate - this) / 3600000); //计算日差 case 'd': return parseInt((objDate - this) / 86400000); //计算周差 case 'w': return parseInt((objDate - this) / (86400000 * 7)); //计算月差 case 'm': return (objDate.getMonth() + 1) + ((objDate.getFullYear() - this.getFullYear()) * 12) - (this.getMonth() + 1); //计算年差 case 'y': return objDate.getFullYear() - this.getFullYear(); //输入有误 default: return undefined; } }; //检测是否为空 Object.prototype.IsNullOrEmpty = function() { var obj = this; var flag = false; if (obj == null || obj == undefined || typeof (obj) == 'undefined' || obj == '') { flag = true; } else if (typeof (obj) == 'string') { obj = obj.trim(); if (obj == '') {//为空 flag = true; } else {//不为空 obj = obj.toUpperCase(); if (obj == 'NULL' || obj == 'UNDEFINED' || obj == '{}') { flag = true; } } } else { flag = false; } return flag;

作者:qq_32259579发表于2017/6/22 12:03:43 原文链接
阅读:292评论:0查看评论
]]>
qq_32259579的博客 - 钱柜娱乐开户 /qq_32259579/article/details/73506206 /qq_32259579/article/details/73506206 qq_32259579 2017-06-20T19:03:36 补充:

jQuery中each类似于javascript的for循环

但不同于for循环的是在each里面不能使用break结束循环,也不能使用continue来结束本次循环,想要实现类似的功能就只能用return,
break           用return false
continue      用return ture



下面简单使用jQuery来操作iframe的一些记录

第一、在iframe中查找父页面元素的方法:
$('#id', window.parent.document)

第二、在父页面中获取iframe中的元素方法:
$(this).contents().find("#suggestBox")

第三、在iframe中调用父页面中定义的方法和变量:
parent.method
parent.value

iframe里用jquery获取父页面body
iframe.html


<html>
<script src='jquerymin.js'>
</script>
<body id='1'>
    <div>it is a iframe</div>
</body>    
<script>
    $(document).ready(
        function()
        {
           
        var c = $(window.parent.document.body) //麻烦的方法: var c = $($(window).eq(0)[0].parent.document).find('body'); ,忘了可以用前面的方法了
            
        alert(c.html());
        }
    );
    
</script>
</html>

content.html

<html>
    <script src='jquerymin.js'>
</script>
<body id='fa'>
    <iframe src='iframe.html' width='100' height='100'></iframe>
    <br>
        <br>
            <br>
            <div id='mydiv'>content iframe</div>
</body>    
<script>
    function a()
    {
        alert(1);
    }
    alert($(document).text());
    </script>
</html>


实际项目中应用的代码

function myCheck(iframe){
    	var flag = true;
    	$("input[name]",iframe.document).each(function(){
    		if($(this).attr("name")=="contentImage") return true;
    		if($(this).val()==""){
 				alert("表单不允许有空选项,请填写完整");
 				$(this).focus();
 				flag= false;
 				return flag;
 		  	}
    	});
 	   return flag;
 	} 



作者:qq_32259579发表于2017/6/20 19:03:36 原文链接
阅读:430评论:0查看评论
]]>
qq_32259579的博客 - 钱柜娱乐开户 /qq_32259579/article/details/73498479 /qq_32259579/article/details/73498479 qq_32259579 2017-06-20T15:12:16 学习中偶然的机会了解到ajax是无记录的请求,那么这就带来了一个问题,如果客户要求点击浏览器的后退按钮时,要求退回的上一个’锚点‘?

下面记录一下多种解决方案中的比较简单的一个,实则借助了html5中强大的history对象的pushState方法,如有不正确的地方望请指出,握手~

需求:

  一个list的页面,页面的底部是一个加载更多的超链接或按钮,我得是超链接,

<div id="loading27">加载中</div>
<div class="tutor-btn">
     <a href="#" id="getMore" pageno="${pageNo+1}" typeid="2">加载更多</a>
</div>


部分js代码:

$(function() {
	$("#loading27").hide();
	$("#getMore").click(function() {
		var _this = $(this), typeId=_this.attr("typeid"),pageNo = _this.attr("pageno");// 分页码
		var url = '';
		if((typeId == '1_tutor') || (typeId == '1_major')){
			url = '/loadMore/tutorMajor';
		}
		if(typeId == 2){
			url = '/loadMore/activity';
		}
		if(typeId == 3){
			url = '/loadMore/student';
		}
		if (pageNo == 0) {
			return false;
		}
		$("#loading27").show();
		$.ajax({
			url : url,
			data : {
				typeId : typeId,
				pageNo : pageNo
			},
			success : function(data) {
				if (data != '') {
					$(".list-content:last").append(data);// 数据显示到页面
					_this.attr("pageno", Number(pageNo) + 1);// 分页+1
				} else {
					_this.text("已加载完");
					_this.removeAttr("href").css("background-color", "#d4d4d4");
					_this.attr("pageno", Number(pageNo) + 1);// 分页+1
				}
				$("#loading27").hide();
			}
		});
		return false;
	});
});

历史记录的js部分(重要)

function isContains(str, substr) {
	return str.indexOf(substr) >= 0;
}

function savePage() { // 操作浏览器的历史记录
	var nowTop = $(window).scrollTop();
	history.replaceState('', document.title, location.href.replace(
			location.hash, "")
			+ "#nowTop=" + nowTop);
}

function toTutorDeatil(tutorId) {
	var pageNo = $("#getMore").attr("pageno") - 1;
	var href = document.location.href;
	if (isContains(href, "pageNo")) 
		href = href.substring(0, href.indexOf("?"));
	history.pushState('', document.title, href + "?pageNo=" + pageNo);
	window.location.href = "/tutorMajor/tutor/detail?majortutorId=" + tutorId;
}

后台对应的java代码部分(之举其一)

/**
	 * 学员列表
	 * 
	 * @return
	 */
	@RequestMapping("/list")
	public ModelAndView activityList(Integer pageNo) {      // 接受前台传递过来的页号
		pageNo = null != pageNo && pageNo > 0 ? pageNo : 1;
		ModelAndView modelAndView = new ModelAndView("activity/activity");
		List<ActivityModel> activityList = activityService.findActivityList(null, 1, Constants.LOAD_MORN * pageNo);  // 将当前页码的数据一次性查出
		for (ActivityModel activity : activityList) {
			TutorMajorModel major = tutorMajorService.getTutorMajorPaperById(activity.getTutorId());
			activity.setTutorMajorModel(major);
		}
		modelAndView.addObject("activityList", activityList);

		// 文章列表
		List<TutorMajorModel> paperList = tutorMajorService.findPaperList(1, Constants.CEBIANLAN);
		modelAndView.addObject("paperList", paperList);
		modelAndView.addObject("pageNo", pageNo);    // 此处要将当前页回显到loadMore的'加载更多'的超链接上
		return modelAndView;
	}


作者:qq_32259579发表于2017/6/20 15:12:16 原文链接
阅读:387评论:0查看评论
]]>