默认jQuery所有的Ajax请求默认都是异步处理,即在回调函数里处理返回结果:
$.get('b.txt', function(data){
console.log(data);
});
执行结果:
为了更清楚的知道异步处理特性,改写一下
console.log("开始请求!");
$.get('b.txt',function(data){
console.log("请求结果!");
});
console.log("请求之后!");
...
默认jQuery所有的Ajax请求默认都是异步处理,即在回调函数里处理返回结果:
$.get('b.txt', function(data){
console.log(data);
});
执行结果:
为了更清楚的知道异步处理特性,改写一下
console.log("开始请求!");
$.get('b.txt',function(data){
console.log("请求结果!");
});
console.log("请求之后!");
...
这是一个Java写的文档生成工具,注释风格要求跟Java的一样即可生成出注释文档,非常好用。直接到官网下载,网上一大堆教程都是JsDoc2版的,现在官网已经说了不再支持JsDoc2版,推荐使用JsDoc3版本。
Github: https://github.com/jsdoc3/jsdoc
下载后不用安装直接就能用,当然还是要先安装配置好JDK环境,不会的自行找资料。以Win平台做例子,下载过来后解压然后启动命令模式进入程序目录下执行jsdoc即可启动程序,可以直接jsdoc --help
查看帮助文档,jsdoc3更直接方便的生成注释文档
...
Linux中grep是一个常用的搜索命令,今天介绍一下如何使用这个命令在多个文件里检索,用法很简单
grep <searching string> <pattern searching file>
如果我要检索当前所有md文件中的Hello关键字,可以这么用
$ grep Hello *.md
a.md:Hello World!
b.md:Hello, Jac
b.md:Hello, Jim
如果我们想知道是哪一行,可以加-nr
属性
grep -nr Hello *.md
a.md:1:Hello World!
b.md:1:Hello, Jac
b.md:2:Hello, Jim
...
jQuery中,有一个强大的替换函数replaceWith(),使用非常简单,如:
// 把所有p标签替换为“##”
$('p').replaceWith('##');
利用这个replaceWith,我们可以把所有p标签替换为b标签,内容不变:
$('p').each(function(){
$(this).replaceWith('<b>'+$(this).html()+'</b>');
});
如果你开发的是一个多语言的网站,甚至可以利用这个特性,比如,在你需要翻译的文字上加上i标签,然后遍历翻译替换。
...
在JavaScript中比较两个对象的成员是否相等有点麻烦,如果只是第一层比较,很容易,但子对象里的属性可能又是一个对象,所以只能递归。
代码:
// 去重
Array.prototype.unique = function () {
this.sort();
var re = [this[0]];
for (var i = 1; i < this.length; i++) {
if (this[i] !== re[re.length-1]) {
re.push(this[i]);
}
}
return re;
}
var objectDeepEqual = function(o1, o2) {
if(typeof o1 != typeof o2){
return false;
}
if(typeof o1.length != typeof o2.length ){
return false;
}
var bool = true;
var keyArr1 = [];
var keyArr2 = [];
for (var i in o1) {
keyArr1.push(i);
}
for (var i in o2) {
keyArr2.push(i);
}
if (keyArr1.length != keyArr2.length) {
return false;
}
for(var i = 0, k = keyArr2.length; i < k; i++){
keyArr1.push(keyArr2[i]);
}
var keyArr = keyArr1.unique();
for(var i=0,k=keyArr.length;i<k;i++){
if ((keyArr[i] in o1) && (keyArr[i] in o2)) {
if (typeof o1[keyArr[i]] == 'object' && typeof o2[keyArr[i]] == 'object' ) {
bool = objectDeepEqual(o1[keyArr[i]], o2[keyArr[i]]);
} else if (o1[keyArr[i]] !== o2[keyArr[i]]){
return false;
}
}else{
return false;
}
}
return bool;
};
...
翻了一下Nginx的log,发现这些傻逼天天使用程序不停的想要盗取我站点资料
14.114.23.72 - [23/Jul/2013:16:40:01] "HEAD /wwwroot.rar HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:01] "HEAD /wwwroot.zip HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:01] "HEAD /www.rar HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /www.zip HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /bbs.rar HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /bbs.zip HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /web.rar HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /web.zip HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /www.qttc.net.rar HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /www.qttc.net.zip HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /www_qttc_net.rar HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /www_qttc_net.zip HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /wwwqttcnet.rar HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /wwwqttcnet.zip HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:02] "HEAD /qttc.net.rar HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:03] "HEAD /qttc.net.zip HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:03] "HEAD /qttc.rar HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
14.114.23.72 - [23/Jul/2013:16:40:03] "HEAD /qttc.zip HTTP/1.1" 405 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
...
今天写一个自定义右键菜单功能,要实现这个功能需要捕获右键事件,这个很容易,几乎没有任何兼容。标签上添加 oncontextmenu 事件就好。下来就是阻止事件传播以及阻止系统右键弹出菜单的功能。于是我这么干
var e = evt || window.event;
if (e.preventDefault) {
e.preventDefault();
}
if (e.stopPropagation) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}
...
之前一直都使用memcached做缓存,最近想尝试一下Nginx的proxy_cache缓存方式,proxy_cache可以根据指定key的组合方案生成MD5哈希把页面结果存储在磁盘上,跟大多综合站点的生成静态页的缓存方式一样。proxy_cache方式跟memcached内存级别的缓存还是不能比拟,但Nginx目前还不能做memcached的write动作,所以简单配置proxy_cache也能抵挡不少鸭梨。
但在网络上搜索几篇文章以后,发现大家写的很模糊,很多文章都是抄袭复制品。所以按照网络上的教程,我一开始是这么配置的,在http段增加:
...
这几道题是在网上看到的,感觉挺有意思,拿来给大家分享其中的陷阱,看看你会不会掉入其中。
$arr = array(0 => 1, "aa" => 2, 3, 4);
foreach($arr as $key=>$val){
print($key == "aa" ? 5 : $val);
}
输出结果是多少?如果的答案是1534就掉入陷阱了。
先看看这个数组最终形成的结构:
Array
(
[0] => 1
[aa] => 2
[1] => 3
[2] => 4
)
然后遍历每一个元素的key看等不等于aa,等于就用5替代。当我告诉你答案是5534的时候,你会不会有点惊讶!难道0等于"aa"吗?是的,0就等于"aa",这道题重点就考你这个。在PHP中两个值进行逻辑判断时,如果两个值的类型不一致PHP会自动把右边的值转换到左边的类型,然后再进行判断。因此"aa"转换整形等于0,自然也就等于左边的0了。你可以使用全等于避免这种该情况,也就是如果你写成
...
在使用left join
等联表查询时,常遇到某些字段为null,一般都在程序处理使用if a==null
判断做处理,其实MySQL本身也有一个IFNULL
函数可以处理。
name:
mysql> select * from name;
+------+-----------+
| id | user |
+------+-----------+
| 1 | xiaoqiang |
| 2 | lisi |
| 3 | xiaowu |
| 4 | laoliu |
+------+-----------+
4 rows in set (0.00 sec)
...