因为JavaScript水平太渣,以前我都是用JQuery来做ajax。现在看了些资料,感觉原生的写法也不难,而且兼容性也已经不错了,所以跟着练一练。
同步的ajax请求:
var xhr=new XMLHttpRequest(); xhr.open("get","http://saber.我爱你/demo/checknew.php",false); xhr.send(null); if (xhr.status===200) { alert(xhr.responseText); }else{ alert("发生了异常,状态码为"+xhr.status+","+xhr.statusText); }
返回的数据里有如下属性:
responseText:作为响应主体被返回的文本。
responseXML:如果响应的内容类型是"text/xml"或"application/xml",这个属性中将保存包含着响应数据的XML DOM 文档。
status:响应的HTTP 状态。
statusText:HTTP 状态的说明。
异步的ajax请求:
var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if (xhr.readyState===4) { if (xhr.status===200) { alert(xhr.responseText); }else{ alert("发生了异常,状态码为"+xhr.status+","+xhr.statusText); } } } xhr.open("get","http://saber.我爱你/demo/checknew.php",true); xhr.send(null);
检测状态的部分也可以这样写:
xhr.onload=function (argument) { if (this.status == 200) { //…… } }
异步请求除了在xhr.open里将最后的参数设置为true之外,在接收数据时也和同步请求不同。异步请求通过检查xhr对象的readyState属性来判断请求处在哪个阶段。当readyState为4时,表示接收到了数据,并且数据可用。
我们通过onreadystatechange事件来检测readyState的值,当值为4时即可对数据进行处理。
另外,在接收到响应之前还可以调用abort()方法来取消异步请求。即xhr.abort(); 。
原生Ajax的简单实例
画师&po主:微博君与
这是画师发在微博上的一组仙剑奇侠传人物“大头贴”,又漂亮又可爱~
还有第二弹:
我想说,你的老婆们都很不错,可惜下一秒就是我的了(doge
下面放图~
Read More →
一些仙剑人物的“大头贴”
此资源已失效
这是截止至2016年6月30日时,神姬全部的HCG,都是做成了gif图片的,另外还有些静态cg图片。
在国内说到神姬,恐怕大家第一印象就是绿帽了←_← 我不喜欢ntr,也没打算去玩这游戏(唉,像我这么纯洁的人不多了),所以我的内心不但毫无波动,甚至还听到了引擎的轰鸣声。
放几张静态预览图 姑且加个预警,未成年人请务必在家长陪同下观看。
Read More →
神姫Project HCG下载
上个月底在微博看到白夜ReKi发了个预售拉姆雷姆同人本的微博,于是就去某宝预定啦~现在快一个月了,终于拿到啦~
内容有一个手提袋、绘本、明信片,还有一个可爱的挂件~敲萌的~
Read More →
蕾姆拉姆同人本到啦~
php中最常用的截取文字的函数是substr(),但是在该函数中,中文占用2个或3个长度,所以可能把汉字截断,产生乱码。
有一个办法是使用mb_substr()来截取文字。这样确实可以,因为mb_substr()把所有文字都当做一个长度,所以截取中文时是整个字截取的,不会乱码。但mb_substr()的长度计算方法和substr()不同,有时候反而不能用它。经过一番苦搜,我找到了用php的ord()函数来截取文字的办法。
这种方法的字数计算方法和substr()一致,但不会导致汉字被截断.如果指定的长度会截断汉字,它会把因截断而产生的残缺汉字扔掉(以最后截取出来的长度有可能会比指定的长度少一两位。)。
另外它的参数也只有两个,一个是字符串,一个是截取长度。没错,它不能指定起始位置。
GBK版本:
function gb2312_substr($str, $limit) { $restr =''; for($i=0;$i< $limit-3;$i++) { $restr .= ord($str[$i])>127 ? $str[$i].$str[++$i] : $str[$i]; } return $restr; }
UTF-8版本:
function utf8_substr($str, $limit) { $restr = ''; for($i=0;$i< $limit-3;$i++) { $restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i]; } return $restr; }
php截取中文不乱码的代码
前几天就发了一张,你们表示要丢我蕾姆? 有本事丢啊,我一定好好接住
今天又搜了搜,找到了coser信息,顺带又找到了一些图←_← 来来来,快丢我一车蕾姆。
coser:しらが泱 (Shiraga Yanko)
国籍:Taiwan
WorldCosplay主页
Read More →
一组艾米莉亚cosplay图片
function http_status($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_exec($ch); $status = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $status; }
可以用这个函数来获取url请求的状态码,判断404很方便→_→
不过如果测试p站图片url的话,还得加上refer信息来绕过防盗链。
一个下载器搞得我找了好多php的东西,心好累。
php获取url的状态码
今天闲来无事搜了几个tag,下载了下来,把tag_愛液的顺便发这里一份吧。下载的都是单图作品,147P。
度盘下载 提取码:qcw1
顺便欢迎大家使用我的pixiv下载器 ←_←
部分预览:
Read More →
pixiv tag_愛液 收藏数大于1500的单图 147P
先吃我大鼻孔
今天我在改进pixiv下载器,想把tag信息保存到文件名里。前两天我研究了“windows中文件名最大长度的问题”,也是为这个做准备。我很快把获取tag的代码写好了,也在php里限制了文件名最大长度。但是做完之后感觉有点不对劲。怎么不对劲呢?下载图片的失败几率比以前大大提高了。错误都是:
Warning:fopen() Invalid argument
那么到底文件名哪里不对呢?这问题折腾了我五六个小时,我下班都没回去,坐在办公室里还在研究这个问题。天见可怜,我终于还是找到了问题的真相。
问题还是出在长度上。
windows计算文件名(包括路径)都是按【字数】算的,也就是说,不管你是中英混合还是怎么的,都能写满256个字。
我以为用php去创建文件也可以这样,于是我在php里用mb_strlen()函数去计算字数,这个函数也是把一个文字当做一个长度算。结果我这样做是错的,php虽然也会限制文件名和路径长度之和不能超过256个字符,但它真的只是字符长度,不是字数。所以php里操作文件时,涉及到文件名长度,要使用strlen()函数。
strlen()的计算方法是,英文占一个字符,而中文字符在gbk编码中算两个字符,在utf8编码中算三个字符。还好我使用的gbk编码,否则能用的字数要更少了。
下面这个路径在php的gbk编码中算做256长度(字节?):
F:\wamp\www\t/pixivimg/专辑1422_ 【一无所有的“死亡回归”!】Re 从零开始的异世界生活特辑 /56938050_p0_tag-ナツキスバル,Re ゼロから始める異世界生活,スバル,菜月昴,ゼロから始める異世界生活,リゼロ,リゼロ500users入り,Re ゼロから始める異世界00usersxxxxxxx入り.jpg
当然,用windows的计算方式,刚到170个长度。
好吧……为了在有限的长度里多给tag腾腾地方,我把文件名里很多东西都去掉了。标题啊,日期啊什么的都扔了,只留下图片id和tag。现在的文件名是这样的:
19566474_p0-よんでますよ、アザゼルさん。,十点じゃ足りません!,ふつくしい,なにこれ綺麗,サラマンダーwwwwww,一体だけ浮いてるw,まんまですよ、マンダはん,アザゼルさん1000users入り,キャプショ.jpg
这个长度已经接近极限了。心好累,感觉不会再爱了。
关于PHP操作文件时最长文件名的研究
最近有个功能需要判断字数。PHP 中有很多函数可以计算字符串的长度,如strlen,mb_strlen,mb_strwidth。测试如下:
echo strlen("你好ABC") . ""; # 输出 9 echo mb_strlen("你好ABC", 'UTF-8') . ""; # 输出 5 echo mb_strwidth("你好ABC") . ""; #输出 7
可以看出,strlen 把中文字符算成3个字节;mb_strlen 不管中文还是英文,都算1个字节;而 mb_strwidth 则把中文算成2个字节。
我需要的是字数而不是字节数,所以mb_strlen是我想要的。但是要注意,“把汉字算做1个长度”必须指定为utf-8编码,否则它也会把汉字算做3个字节。
另外,截取字符串时,也可以用mb_substr指定utf-8编码,将汉字算做一个长度。如:
echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
这个输出需要页面环境有编码才不会乱码。例如将此结果输出到html中,输出的字符会使用html页面的编码。如果单独写这一行php输出,还会是乱码。