js正则标志/g /i /m的用法

js正则标志/g /i /m的用法 正则的思想都是一样的,但是具体的写法会有所不同,在这里提到的/g,/i,/m在其他的地方也许就不能用了。 一,js正则标志/g,/i,/m说明 1,/g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个 2,/i 表示匹配的时候不区分大小写 3,/m 表示多行匹配,什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号 二,实例说明 1,/g的用法 查看复制打印? 2,/i的用法 查看复制打印? 3,/m的用法 查看复制打印? //从上例中可以看出/m影响的^$的分割方式 上面说的三个例子,/i,/g,/m分开来说的,可以排列组合使用的。个人觉得/m没有多大用处 http://blog.51yip.com/jsjquery/1076.html javascript 密码 正则 let testPassword = /^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)(?=.*?[!@#$%^&;*()_=+\-])[a-zA-Z\d!@#$%^&;*()_=+\-]*$/; //判断输入格式 if(testPassword.test(this.passwordText)){ ...密码匹配成功 }else { ...密码匹配失败 } ———————————————— 版权声明:本文为CSDN博主「weixin_42553179」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_42553179/article/details/103045970

2014-03-10 · 1 min · 40 words · -

Hammer.js 移动设备触摸手势js库

Hammer.js 移动设备触摸手势js库 hammer.js是一个多点触摸手势库,能够为网页加入Tap、Double Tap、Swipe、Hold、Pinch、Drag等多点触摸事件,免去自己监听底层touchstart、touchmove、touchend事件并且写一大堆判断逻辑的痛苦。hammer.js不但支持触摸屏设备的浏览器,在桌面浏览器上,也能将鼠标的点击当做触摸,方便开发人员在桌面浏览器上调试。这是一个专为触摸手势而生的js库 http://www.cnblogs.com/cydmk/archive/2013/05/12/3073570.html https://github.com/EightMedia http://eightmedia.github.io/hammer.js/

2014-03-10 · 1 min · 7 words · -

javaEE project

javaEE project mkdir javaEELab cd javaEELab mkdir source mkdir workspace cd source #create a project in os china git server and clone ... git clone git@git.oschina.net:wiloon/javaEELab.git cd javaEELab gradle init -typeb java-library

2014-03-09 · 1 min · 32 words · -

emacs diff

emacs diff diff 使用 Unix 的 diff 工具程序,你可以找到两个文件的不同之处。所比较的两个文件可能是: 原始文件与更改之后的文件 不同的两个人编辑的同一个文件(譬如,一个项目中协同工作的两个人编辑的文件) 不同机器上的两个文件(譬如,你的 .emacs 文件可能在家和工作场合各有一份拷贝) 对于后面两种文件,两个要比较的文件共有一个原始的文件。此种情况下, diff3 程序会轻松的帮你创建一个文件,文件内容是对原始文件所做的修改记录。 Ediff 除非两个文件的不同之处很少,否则 diff 的输出将会很难阅读。幸运的是, Emacs 提供了一个 diff 的接口,称为 Ediff ,将此工作变得简单。不仅将 diff 的输出变得可读之外, Emacs 还提供了合并文件函数以及其他的应用补丁,更多的细节信息,可以参考Ediff 的 info 文档。 Emacs 还能比较不同文件夹下的两个文件,若你在不同地方工作,这个功能可能会非常有用(如你的Lisp配置文件。 用 Ediff 来比较文件 Ediff 比较的项目有: ( 可用 M-x 来启动 ) <th> 比较项目 </th> <th> 说明 </th> ediff-regions-linewise, ediff-regions- 询问两个缓冲区的名字,然后比较相应的区域。不过你只能在每一个缓冲区中选定一个区域,而不能比较一个文件缓冲区的两个区域。( TODO: 第15个小时的内容 "了解文件" ,会提供一个比较同一个文件中的两个区域的方法。) ediff-buffers 询问两个缓冲区的名字,然后比较 ediff-files 询问两个文件的名字,加载之,然后比较 ediff-windows-linewise, ediff-windows-wordwise 让你选两个窗口,然后比较窗口的内容。 -linewise- 函数比 -wordwise- 函数要快,但另一方面, -wordwise- 工作方式更好,尤其是小区域作业时。 -linewise- 一行一行地比较, -wordwise- 一个单词一个单词地比较。 一些Ediff 控制命令 在 control buffer 中,按键。 ...

2014-03-08 · 2 min · 290 words · -

emacs command

emacs command M-x artist-mode M-x artist-mode-off 跳转到行 (define-key global-map “\C-c\C-g” ‘goto-line) C-x C-f 文件名' — 打开文件C-x C-s’ — 保存文件 C-x C-c' — 退出EmacsC-x u’ — 取消上一次操作 C-x C-w 按提示输入文件名,另存为 窗格 C-x 2 M-x split-window-vertically 分隔出两个垂直窗格,水平分隔线 C-x 3 M-x split-window-horizontally 分隔出两个水平窗格,垂直分隔线 C-x 1 M-x delete-other-window 只保留当前窗格 ESC ESC ESC M-x keyboard-escape-quit 只保留当前窗格 C-x 0 M-x delete-window 关闭当前窗格 C-x o M-x other-window 在下一个窗格中激活光标 C-M-v M-x scroll-other-window 向下卷动下一个窗格,使用负参数可以向上卷动 缓冲区 C-x C-b M-x list-buffers 查看缓冲区列表 ...

2014-03-08 · 1 min · 141 words · -

golang download file

golang download file http://www.open-open.com/code/view/1440512102513 package main import ( "fmt" "io" "net/http" "os" ) var ( url = "http://127.0.0.1:1789/src/qq.exe" ) func main() { res, err := http.Get(url) if err != nil { panic(err) } f, err := os.Create("qq.exe") if err != nil { panic(err) } io.Copy(f, res.Body) }

2014-03-07 · 1 min · 47 words · -

如何提问

如何提问 http://macshuo.com/?p=367 遇到问题不要急着问别人,在时间允许的情况下看是否自己能够解决,一方面锻炼自己分析问题和解决问题的能力,另一方面,一旦问题解决了,问题就不是问题,而是你的经验和知识库。况且现在互联网有那么多的技术资料和各类问答网站,想碰到一个别人没碰到的问题,已经非常困难了。 如果做了努力依然不能解决,或者客观条件不允许你自己解决了,那么首先要选择提问对象,不管是是现实中的大神,还是网络上的牛人,确保他是你所知道的最佳解决人选。 你需要一个好的标题,用清晰的短句描述你遇到的问题 至关重要的正文 (1) 用清晰的语言描述你遇到的问题 (2) 提供软件环境,包括操作系统、数据库等相关软件及其版本号 (3) 问题是否可以重现,采用什么方式重现 (4) 采用了什么措施解决问题,最终结果 (可提供日志、程序、截图等描述) (5) 尽可能提供问题相关的可分析文件,包括日志、截图和Core dump等 (6) 不要长篇大论,简明扼要,描述主要问题

2014-03-06 · 1 min · 20 words · -

JDBC URL

JDBC URL disable tls JDK8版本过高引起MySQL连接失败:javax.net.ssl.SSLHandshakeException: No appropriate protocol https://juejin.cn/post/6969142310718144520 jdbc:mysql://127.0.0.1/database0?useunicode=true&characterencoding=utf8&tinyInt1isBit=false&useSSL=false MySQL MySQL Connector/J Driver 驱动程序包: http://mvnrepository.com/artifact/MySQL/MySQL-connector-java 驱动程序类名: com.MySQL.jdbc.Driver JDBC URL Format The general format for a JDBC URL for connecting to a MySQL server is as follows, with items in square brackets ([ ]) being optional: jdbc:MySQL://[host1][:port1][,[host2][:port2]]…[/[database]] [?propertyName1=propertyValue1[&propertyName2=propertyValue2]…] Here is a simple example for a connection URL: jdbc:MySQL://localhost:3306/sakila?profileSQL=true JDBC URL: jdbc:MySQL://:/<database_name> 默认端口3306,如果服务器使用默认端口则port可以省略 ...

2014-03-05 · 2 min · 332 words · -

ASCII

ASCII Dec Hex Char 10 0A LF 13 0D CR 32 20 Space 35 30 # 48 30 0 57 39 9 58 3A : 65 41 A 66 42 B 67 43 C 70 46 F 73 49 I 90 5A Z 97 61 a 101 65 e 102 66 f 115 73 s 122 7A z 124 7C | ASCII字符集,最基本的包含了128个字符。其中前32个,0-31,即0×00-0x1F,都是不可见字符。这些字符,就叫做控制字符。 这些字符没法打印出来,但是每个字符,都对应着一个特殊的控制功能的字符,简称功能字符或功能码Function Code。 简言之: ASCII中前32个字符,统称为Function Code功能字符。 此外,由于ASCII中的127对应的是Delete,也是不可见的,所以,此处根据笔者的理解,也可以归为Function Code。 此类字符,对应不同的"功能",起到一定的"控制作用",所以,称为控制字符。 ...

2014-03-05 · 1 min · 79 words · -

MITM, ARP缓存中毒

‘MITM,ARP缓存中毒’ http://www.cnblogs.com/songhan/archive/2012/07/25/2607704.html ARP介绍 ARP是个地址解析协议。最直白的说法是: 在IP-以太网中,当一个上层协议要发包时,有了节点的IP地址,ARP就能提供该节点的MAC地址。 ARP缓存: ARP cache 是个用来储存(IP, MAC)地址的缓冲区。当ARP被询问一个已知IP地址节点的MAC地址时,先在ARP cache 查看,若存在,就直接返回MAC地址,若不存在,才发送ARP request向局域网查询。【在A不知道B的MAC地址的情况下,A就广播一个ARP请求包,请求包中填有B的IP(192.168.1.2),以太网中的所有计算机都会接收这个请求,而正常的情况下只有B会给出ARP应答包,包中就填充上了B的MAC地址,并回复给A。A得到ARP应答后,将B的MAC地址放入本机缓存,便于下次使用。本机MAC缓存是有生存期的,生存期结束后,将再次重复上面的过程。】【ARP请求和ARP回复。请求和回复的目的在于确定与特定IP地址相关的硬件MAC地址,这样流量才能够在网络上找到目的地。请求数据包被发送给网络段上的每台设备并发出信息"我的IP地址是XX.XX.XX.XX,我的MAC地址是 XX:XX:XX:XX:XX:XX,我需要将信息发送给这个IP地址XX.XX.XX.XX,但是我不知道它的硬件地址,请这个IP地址将其MAC地址回复给我?“回复会以ARP回复数据包的形式,并回复说"你好,传递设备,我就是你要找的IP地址XX.XX.XX.XX,我的MAC地址是 XX:XX:XX:XX:XX:XX”,收到回复后,传递设备会更新其ARP缓存表,然后设备就可以与另一台设备进行通信。】 ARP欺骗 任何机器都可以向另一台主机发送ARP回复数据包,并迫使主机更新其ARP缓存。假冒IP和MAC。 ARP协议并不只在发送了ARP请求才接收ARP应答。当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中。 因此,当局域网中的某台机器B向A发送一个自己伪造的ARP应答,而如果这个应答是B冒充C伪造来的,即IP地址为C的IP,而MAC地址是伪造的,则当A接收到B伪造的ARP应答后,就会更新本地的ARP缓存,这样在A看来C的IP地址没有变,而它的MAC地址已经不是原来那个了。由于局域网的网络流通不是根据IP地址进行,而是按照MAC地址进行传输。所以,那个伪造出来的MAC地址在A上被改变成一个不存在的MAC地址,这样就会造成网络不通,导致A不能Ping通C!这就是一个简单的ARP欺骗。 危害 拒绝服务 一个黑客可以只做简单的操作就将一个重要的IP地址和一个错误的MAC地址绑定。 例如,黑客可以发送一个ARP响应报文 (到你的计算机) 将你所在网络的路由器 (即我们常说的网关,译者注) IP地址和一个根本不存在的MAC地址绑定起来。你的计算机以为它知道默认网关在哪,但是事实上它的所有数据包,其目的地址都不在这个网络的网段上 (因为那个不存在的MAC不在此局域网的网段上,译者注) ,它们最后消逝在了无尽的比特流中 (即因数据包的生命周期到了而信号消失,译者注)。仅仅这一下,黑客就能阻止你连上因特网。 中间人攻击 黑客利用ARP缓存中毒来截获你的局域网中两台设备之间的网络信息。例如,我们假象黑客想要窃听你的计算机,192.168.0.12,和你的网络路由器 (即网关,译者注) ,192.168.0.1,之间的通信信息。 黑客先发送一个恶意的ARP “响应” ( 因为在此之前根本没有请求) 到你的路由器,将他的计算机的MAC地址和192.168.0.12绑定。 然后,黑客在发送一个恶意的ARP响应到你的计算机,将他的MAC地址和192.168.0.1绑定起来。 现在你的机器以为黑客的计算机是你的路由器了。 最后,黑客开启一个叫IP转发的系统功能。这个功能让黑客能将所有来自你的计算机的网络信息转发到路由器。 现在,只要你尝试上网,你的计算机就会将网络信息发送到黑客的机器上,然后黑客再将其转发到路由器。由于黑客仍然将你的信息转发到网络路由器,所以你并不会察觉到他已经截获了所有你的网络信息,或许还窃听了你的明文密码或者劫持了你曾经安全的网络会话。 MAC洪泛 MAC洪泛是一种旨在网络交换机的ARP缓存中毒技术。当这些交换机流量超载时它们常常进入到 “集线器” 模式。在 “集线器” 模式中,交换机由于太过繁忙而不能执行它的端口安全检测功能,而是仅仅向网络中的每一台计算机广播所有的网络数据。利用大量的假冒ARP响应数据包去洪泛一台交换机的ARP映射表,黑客能使大多数制造商的交换机超载,然后当交换机进入 “集线器” 模式时,就可以发送 (恶意的) 包去嗅探你的局域网。 防御 小型网络 静态IP地址和静态ARP映射表。 大型网络 “端口安全” 功能是允许你强制使你的交换机在每个端口只允许 (IP地址对应的) 一个MAC地址通过。这个功能会阻止黑客改变他机器的MAC地址或试图映射多个MAC地址到他的机器上。 一般网络 ARP监视工具,比如ARPwatch,当有不正常的ARP通信时它会提醒你。 http://www.xker.com/page/e2010/1122/99144_4.html http://net.anquan365.com/protocol/other/201112/166775.html

2014-03-04 · 1 min · 65 words · -

AppImage

AppImage AppImage 是一种在 Linux 系统中用于分发便携式软件而不需要超级用户权限来安装它们的格式。 它还试图允许 Linux 的上游开发者来分发他们的程序而不用考虑不同 Linux 发行版间的区别。 AppImage的核心思想是一个文件即一个应用程序 。 每个 AppImage 都包含应用程序以及应用程序运行所需的所有文件。换句话说,除了操作系统本身的基础组件,Appimage 无需依赖即可运行。 在 2004 年,它以 klik 的名字发布。自那时起,它就被不断地开发,并在 2011 年被重新命名为 PortableLinuxApps,在2013年被重新命名为 AppImage。 运行方法 添加可执行权限 chmod a+x .AppImage 执行它! ./.AppImage https://doc.appimage.cn/docs/appimage/

2014-03-04 · 1 min · 33 words · -

gradle ojdbc6

gradle ojdbc6 install ojdbc into loacal repo http://www.wiloon.com/?p=4863 modify build.gradle, then gradle can search local maven repo apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'war' apply plugin: "maven" repositories { mavenCentral() maven { name 'local-repo' url 'file:///D:/dev/mavenRepo/' } } http://forums.gradle.org/gradle/topics/access_a_oracle_db_runs_no_more_with_gradle_1_0_rc_3 http://blog.csdn.net/howdy_world/article/details/25650281

2014-03-04 · 1 min · 42 words · -

番茄冰激凌

番茄冰激凌 番茄含有丰富的营养,多吃有益。习惯上,番茄做法大多凉拌、做汤、炒鸡蛋。这里,为大家介绍几种番茄的夏季另类做法,趁夏季番茄大量上市,不妨试着多做几种花样。 番茄冰饮 原料: 番茄500克,白糖100克。 制作方法: ①选新鲜、成熟番茄,洗净后切小块,加入白糖拌匀,腌两小时,待腌出汁备用;②将其放入冰格内,置冰箱中冷冻成冰块即可。 特点: 色泽鲜红,酸甜可口,生津开胃,促进食欲。 番茄冰淇淋 原料: 番茄100克,牛奶100克,奶油30克,水70克,鸡蛋两个,白糖50克,香精少许。 制作方法: ①将番茄洗净去皮,切成碎块,加水煮沸成酱汁备用,牛奶煮沸备用。②将糖、鸡蛋加入稍凉的番茄汁内,边加入边不断搅拌,再加牛奶,搅匀备用。③将混合液加热、过滤、晾凉,加奶油、香精,拌匀。④把上述混合液置冰箱冷冻,并经常搅拌,凝冻后即可食用。

2014-03-03 · 1 min · 14 words · -

Javascript 重定向 window.location.href / replace / reload()

Javascript 重定向 window.location.href / replace / reload() location.href,可以点击浏览器的后退按钮返回本页。 location.assign(URL) assign() 方法可加载一个新的文档。效果与location.href相当。 location.reload(force) 如果该方法没有规定参数,或者参数是 false,它就会用 HTTP 头 If-Modified-Since 来检测服务器上的文档是否已改变。如果文档已改变,reload() 会再次下载该文档。如果文档未改变,则该方法将从缓存中装载文档。这与用户单击浏览器的刷新按钮的效果是完全一样的。 如果把该方法的参数设置为 true,那么无论文档的最后修改日期是什么,它都会绕过缓存,从服务器上重新下载该文档。这与用户在单击浏览器的刷新按钮时按住 Shift 健的效果是完全一样。 location.replace(newURL) 不能点击浏览区的后退按钮返回本页。 将地址替换成新url,该方法通过指定URL替换当前缓存在历史里 (客户端) 的项目, 因此当使用replace方法之后,你不能通过"前进"和"后 退"来访问已经被替换的URL,这个特点对于做一些过渡页面非常有用! replace() 方法不会在 History 对象中生成一个新的记录。当使用该方法时,新的 URL 将覆盖 History 对象中的当前记录。 http://jun1986.iteye.com/blog/1176909 一、最外层top跳转页面,适合用于iframe框架集 top.window.location.href("${pageContext.request.contextPath}/Login_goBack"); ============================================================================================ 二、window.location.href和window.location.replace的区别 1.window.location.href=“url”: 改变url地址; 三、强制页面刷新 1.window.location.reload(): 强制刷新页面,从服务器重新请求! ============================================================================================ 四、window.location.reload();页面实现跳转和刷新 1 history.go(0) 2 location.reload() 3 location=location 4 location.assign(location) 5 document.execCommand(‘Refresh’) 6 window.navigate(location) 7 location.replace(location) 8 document.URL=location.href 这几个都可以刷新 window.location.reload();刷新 ...

2014-03-03 · 1 min · 100 words · -

deluged

deluged docker run \ -d \ --name=deluge \ --net=host \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Asia/Shanghai \ -v deluge-config:/config \ -v deluge-downloads:/downloads \ --restart unless-stopped \ linuxserver/deluge #debian apt-get update apt-get install deluged deluge-web #运行 deluge守护进程 deluged 和web控制端 deluged nohup deluge-web & 用浏览器访问 http://ip:8112 默认密码是 deluge http://www.jianshu.com/p/48feb68b3b30 http://dev.deluge-torrent.org/wiki/UserGuide

2014-03-02 · 1 min · 50 words · -

Raspberry Pi init

Raspberry Pi init deluged - http://www.wiloon.com/?p=6306

2014-03-02 · 1 min · 6 words · -

linux下休眠/待机命令

linux下休眠/待机命令 命令行工具hibernate 安装 hibernate sudo aptitude install hibernate # sleep ,系统内存映象将写入 swap 区后关机 sudo hibernate-disk # suspend ,就是挂起。 sudo hibernate-ram #配置hiberante sudo dpkg-reconfigure hibernate 主要是休眠唤醒密码。 if you cat /sys/power/state mem disk you can echo “mem” > /sys/power/state 这相当于待机 echo “disk” > /sys/power/state 这相当于休眠 from http://linux.chinaunix.net/bbs/viewthread.php?tid=1057578 命令行中执行如下: [root@fsc feng]# file /sys/power/state /sys/power/state: ASCII text [root@fsc feng]# cat /sys/power/state standby mem disk [root@fsc feng]# echo “mem”>/sys/power/state ...

2014-03-02 · 2 min · 220 words · -

Java Iterator 迭代器

Java Iterator 迭代器 http://www.cnblogs.com/amboyna/archive/2007/09/25/904804.html http://jnotnull.iteye.com/blog/262379 迭代器 (Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为"轻量级"对象,因为创建它的代价小。 Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意: iterator()方法是java.lang.Iterable接口,被Collection继承。 (2) 使用next()获得序列中的下一个元素。 (3) 使用hasNext()检查序列中是否还有元素。 (4) 使用remove()将迭代器新返回的元素删除。 Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。 迭代器应用: list l = new ArrayList(); l.add(“aa”); l.add(“bb”); l.add(“cc”); for (Iterator iter = l.iterator(); iter.hasNext();) { String str = (String)iter.next(); System.out.println(str); } /*迭代器用于while循环 Iterator iter = l.iterator(); while(iter.hasNext()){ String str = (String) iter.next(); System.out.println(str); } */

2014-02-28 · 1 min · 55 words · -

js check platform

js check platform <script type="text/javascript"> <!- //平台、设备和操作系统 var system ={ win : false, mac : false, xll : false }; //检测平台 var p = navigator.platform; alert(p); system.win = p.indexOf("Win") == 0; system.mac = p.indexOf("Mac") == 0; system.x11 = (p == "X11") || (p.indexOf("Linux") == 0); //跳转语句 if(system.win||system.mac||system.xll){//转向后台登陆页面 window.location.href="login.jsp"; }else{ window.location.href="wapLojin.jsp"; } -> </script> var isMobile = { Android: function() { return navigator.userAgent.match(/Android/i) ? true : false; }, BlackBerry: function() { return navigator.userAgent.match(/BlackBerry/i) ? true : false; }, iOS: function() { return navigator.userAgent.match(/iPhone|iPad|iPod/i) ? true : false; }, Windows: function() { return navigator.userAgent.match(/IEMobile/i) ? true : false; }, any: function() { return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Windows()); } }; http://blog.csdn.net/yakson/article/details/9390863 ...

2014-02-27 · 1 min · 112 words · -

golang http 文件下载

golang http 文件下载 golang + gin c.Writer.WriteHeader(http.StatusOK) c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s.bin", "foo")) c.Header("Content-Type", "application/octet-stream") c.Header("Content-Transfer-Encoding", "binary") c.Header("Accept-Ranges", "bytes") c.Header("Connection", "keep-alive") c.Header("Content-Length", fmt.Sprintf("%d", len(paramsBytes))) c.Writer.Write(paramsBytes) vuetify import fileDownload from 'js-file-download' exportCsv (): void { Axios.get('/export', { headers: { Authorization: 'Bearer ' + localStorage.getItem('JWT_TOKEN') }, params: { foo: this.foo, start: this.dateStart + ' ' + this.timeStart, end: this.dateEnd + ' ' + this.timeEnd }, responseType: 'blob' }).then(response => { const fileName = response.headers['content-disposition'].match(/filename=(.*)/)[1] console.log('data: ' + response.data) fileDownload(response.data, fileName) }).catch(error => { console.log({ error }) }) } http://blog.csdn.net/androidmylove/article/details/8881573 // Ajax 文件下载 jQuery.download = function(url, data, method){ // 获得url和data if( url && data ){ // data 是 string 或者 array/object data = typeof data == 'string' ? data : jQuery.param(data); // 把参数组装成 form 的 input var inputs = ''; jQuery.each(data.split('&'), function(){ var pair = this.split('='); inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />'; }); // request发送请求 jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>') .appendTo('body').submit().remove(); }; }; 文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星"而把地球当一个参数传进去。

2014-02-26 · 1 min · 159 words · -