Archive for Scripts

[js] 轻便的XMLHttpRequest应用函数:downloadUrl()

前段时间在用google map api的函数库的时候,发现里面的downloadUrl函数非常好用,所以自己写了一个。用腻了那些什么框架什么池,到头来发现越简单的东西越是适合我这种懒人。

downloadUrl(url, callback, data);

参数说明: » 阅读全文

[JS]遭遇IE内存泄漏

以前因为没有做过比较大型的应用,所以也一直没注意这些。最近的一个项目里需要频繁的创建和清除一批对象,导致IE占用的实际内存和虚拟内存急剧上升,而且最小化IE窗口或关闭窗口也不会释放。搜索了一下关于IE内存泄漏的文章,其中birdshome上的这一系列文章讲的比较全面,引起IE内存泄漏的主要情况为js对象实例跟dom对象的相互引用、“内部函数引用(Closures)”以及DOM插入顺序泄漏。
» 阅读全文

用 PHPRPC 实现 Ajax 安全登录

昨天我举了个用 PHPRPC 实现 Ajax 级联下拉菜单 的例子,那个例子中我们重点要演示的是用 PHPRPC 实现 Ajax 效果是多么的简单。今天我们这个例子主要演示用 PHPRPC 内置的安全加密机制来实现安全登录是多么简单。当然它同样可以用于密码设置、其它关键保密数据的传输等领域。

» 阅读全文

用 PHPRPC 实现 Ajax 级联下拉菜单

级联下拉菜单就是从一个下拉菜单中选中一项后,相应的另一个下拉菜单的内容会随之改变。

一般来说,最简单的,就是每次选中都提交一次表单,刷新整个页面。这也是用户体验度最差的。

另一种是把所有选项在第一次加载时就全部载入整个页面中的 JavaScript 数组中,然后级联通过 JavaScript 来控制,在整个数据量不大时,这是一个不错的实现无刷新并且快速的方法,但是当整个数据量非常大时,这种方法就会使第一次加载变得非常慢了。

还有就是采用 Ajax 方式,即开始只载入第一层菜单的内容,当用户选中第一层菜单的某项时,再通过 XmlHttpRequest 来获取相应选项所对应的第二层菜单的内容。这种方式效果最好,但是采用传统方式来编写这样的 Ajax 程序代码量会比较多。而且如果设计不好,服务器端返回菜单内容的程序的可复用性也会很差。

但是在本文中你会看到用 PHPRPC 来实现这种 Ajax 效果是多么的简单,并且还会具有非常高的可复用性。

» 阅读全文

建一个XMLHttpRequest对象池

在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费。解决的办法就是创建一个XMLHttpRequset的对象池,如果池里有空闲的对象,则使用此对象,否则将创建一个新的对象。

下面是我最近写的一个简单的类:
» 阅读全文

Windows Script 5.6 Documentation更新

跟以前差别不是很大,界面换了,和MSDN一样,内容也有些变化,只有英文版。
File Name: script56.chm Version: 5.6 Date Published: 12/7/2005 Language: English Download Size: 2843 KB

下载

script56

btw:服务器前几天down了,数据也丢了几天的。现在是php5.11+mysql5.0,看来wp跟php5或者mysql5还有点兼容性问题,刚才发文章发不上来,改了几个地方才勉强发了上来。

IE+JS: 上传之前检测图片文件大小

文件上传之前的检测,通常是通过文件名来判断文件类型是否合法,但是要想检测文件的大小很难办到,除非在本地或者使用控件。不过在IE下img有几个附加的属性,如:fileCreatedDate、fileModifiedDate、fileSize、fileUpdatedDate、filters,我们可以通过这些属性来获取图片文件的部分信息,如文件大小,我们用file表单同img标签结合,就能够在上传之前判断图片文件的大小是否合法了。下面是Demo:

限制: K test

还有一个小小的发现就是,IE下动画的onload事件是在每次循环开始都触发,这样我们可以通过他来达到和js里setInterval()函数一样的效果,如:

monkey  loops:

» 阅读全文

如何判断客户端的某个插件是否安装

近日遇到了一些问题,即如何判断客户端是否安装了某个插件、版本是否达到了我们的要求?最常见的就是使用DHTML Behavior中的两个方法:isComponentInstalled和getComponentVersion。
我们先看看msdn上关于这两个方法的说明:
http://msdn.microsoft.com/…/iscomponentinstalled.asp?frame=true
http://msdn.microsoft.com/…/getcomponentversion.asp?frame=true

代码示例: » 阅读全文

Bindows 1.30发布

Bindows

Bindows是一个用来创建功能强大的瘦客户端应用程序的框架。Bindows应用程序运行于现代的Web浏览器中。在其中,它们使用DHTML来呈现丰富的可以包含很多不同窗体小部件(widget)的图形用户界面(GUI)。Bindows应用程序可以使用很多方法与服务器端进行交互。其中大多数方法是基于XML的。它同样支持XML-RPC和基于SOAP的Web Services。程序设计语言是JavaScript。

官方网站:http://www.bindows.net

我放了例子在网站上:http://www.ugia.cn/bindows

同学andot正在翻译Bindows的用户手册,可以通过下列网址查看部分中文文档: http://spaces.msn.com/members/andot

转:比较JavaScript中的集合及其检索效率

转自:鸟食轩

数组是JavaScript提供的一个内部对象,它是一个标准的集合,我们可以添加(push)、删除(shift)里面元素,我们还可以通过for循环遍历里面的元素,那么除了数组我们在JavaScript里还可以有别的集合吗?

由于JavaScript的语言特性,我们可以向通用对象动态添加和删除属性。所以Object也可以看成是JS的一种特殊的集合。下面比较一下Array和Object的特性:

Array:

新建:var ary = new Array(); 或 var ary = [];
增加:ary.push(value);
删除:delete ary[n];
遍历:for ( var i=0 ; i <ary.length ; ++i ) ary[i];

Object:

新建:var obj = new Object(); 或 var obj = {};
增加:obj[key] = value; (key为string)
删除:delete obj[key];
遍历:for ( var key in obj ) obj[key];

从上面的比较可以看出Object完全可以作为一个集合来使用,在使用Popup窗口创建无限级Web页菜单(3)中我介绍过Eric实现的那个__MenuCache__,它也就是一个模拟的集合对象。

如果我们要在Array中检索出一个指定的值,我们需要遍历整个数组:

var keyword = ;
for ( var 
i=ary.length ; ++)
{
    if ( 
ary[i] == keyword )
     {
         
// todo
    
}

而我们在Object中检索一个指定的key的条目,只需要是要使用:

var key '';
 var 
value obj[key];
 
// todo 

Object的这个特性可以用来高效的检索Unique的字符串集合,遍历Array的时间复杂度是O(n),而遍历Object的时间复杂度是O (1)。虽然对于10000次集合的for检索代价也就几十ms,可是如果是1000*1000次检索或更多,使用Object的优势一下就体现出来了。在此之前我做了一个mapping,把100个Unique的字符mapping到1000个字符串数组上,耗时25-30s!后来把for遍历改成了 Object模拟的集合的成员引用,同样的数据量mapping,耗时仅1.7-2s!!!

对于集合的遍历效率(从高到低):var value = obj[key]; > for ( ; ; ) > for ( in )。效率最差的就是for( in )了,如果集合过大,尽量不要使用for ( in )遍历。

Next Page »