Ajax+jQuery实现LightBox与服务器通信
LightBox效果又叫windows关机效果。就是像windows关机时一样,桌面上的应用失效而只能点击关机等框内的几个按钮。在网页中其实就是利用了两个层。其中一个设置成半透明遮住整个屏幕,另一个放在其上面用来显示内容。
在写之前看过了cloudgamer的效果,自认JavaScript功力远不及他。参考了他的效果之后写了这个简单版并加入了LightBox与服务器的通信。
为了方便演示,我把代码都写到一个文件里了,css也直接写在行内。
首先是覆盖层:
先不让他显示、黑色背景、绝对定位。
然后是LightBox:

2

3

4

5

6

7

8

9

要与数据库通信,我放了一个表单在里面获取输入。两个文本框、一个按钮。还有一个关闭LightBox的连接。对于LightBox的样式。首先还是不让其显示,高、宽这样的就不用说了。绝对定位。设置z-index为1001保证他显示在最上面。白色背景。left:50%; top:50%; margin-left:-150px; margin-top:-100px;让其居中。这是css中一种比较常见的设置块状容器居中的方法。当然,这和容器的定位有关。cloudgamer的文章中也讲到了这种方法。要了解更多的关于css的东西可以去标准之路 http://www.aa25.cn/ 或者蓝色理想 http://www.blueidea.com/等地方。当然园子里也很多。(好像有点啰嗦-_-)之后是为了好看设置了一个4像素的边框。
再是要一个开启LightBox的链接
单击他就执行cover();覆盖函数。
最后加了一个select用于在IE中屏蔽的测试

2

3

4

5

6

7

8

之后是JavaScript。
先看一下cover();覆盖函数,这个函数只是让遮盖层和LightBox显示出来,并影藏所有的select,以免在IE中效果有误。

2

3

4

5

6

7

8

9

10

11

12

13

关于遮盖层的高和宽的设置cloudgamer已经有很详细的讲述了。我也是参考他的做法。这里就不多讲了。有兴趣大家可以直接去看:http://www.cnblogs.com/cloudgamer/archive/2008/09/15/1290954.html
再是discover();故名思议,这个函数的功能刚好和上一个相反,所以只需要把两个层设成影藏并重新显示刚才影藏的select就可以了。

2

3

4

5

6

7

8

到这里LightBox效果就基本实现了。接下来要做的是用Ajax让LightBox和服务端通信。首先创建XMLHttpRequest对象:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

这里的变量xmlHttp是全局的,下面还会再用到。因为IE和其他标准浏览器的XMLHttpRequest对象不一样,所以我用了两个条件判断来兼容IE。
创建了XMLHttpRequest对象以后就要用它向服务端发送请求了

2

3

4

5

6

7

8

9

10

11

12

首先获取表单上的值,并根据获得的值构造请求用的url。再用get方法发送请求。这些似乎都是Ajax的标准代码了。发送了请求我们再看服务器要怎么响应了。

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39 }
40

41

42

第一步当然是获得查询参数。之后再作为函数的参数用函数对其进行处理。我这里是模仿了一个登录。至于怎么样从数据库中查出数据以及查出什么数据不是我们这篇文章要讨论的问题。这里不多说。关键是下面几句
2 Response.AppendHeader("Cache-Control", "no-cache");
3 Response.AppendHeader("Pragma", "no-cache");
4 Response.Write("欢迎:" + Session["UserName"]);
5 Response.End();
6
第一句是设置XMLHttpRequest对象返回的类型。我这里设置的是纯文本。也可以设置成“text/xml”。这样返回的就是xml类型的。在客户端可以用DOM获取里面的内容。接下去的两句是设置首部,使浏览器不会在本地缓存结果。之所以要设置两个是为了向后兼容。然后那句大家就应该很熟悉了——输出内容。最后是关闭或者说结束response对象。
现在服务端已经返回数据了,看在客户端的接收。

这里很简单,直接获取responseText,然后仍给InsertMessage()去处理
2 {
3 $("#formLogin").remove();
4 $("#lightBox").append("<div>"+message+"</div>");
5 }
6
这也很简单,把刚才登录的表单移除,再直接把内容扔到一个div里送显。这样基本上就是完成了!
ps。这里和服务端的交互只是个演示。在实际运用时可千万别直接就这样。我是说直接把登录的用户名和密码都用明文直接放到url里!哈哈。。。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步