AJAX返回多个数据

网页上需要按一个按钮后多个数据进行刷新,也就是说要通过AJAX返回多个数据并在页面上显示。比较笨的办法一个返回数据新建一个函数,相当于每个数据都通过AJAX进行一次提交,结果常见的错误就是函数中的变量名一致导致提交错误。即使正确,当多次刷新后,往往会出现数据冲突,比如A数据出现在B数据的地方。这个主要是因为获取数据都是通过if (xmlHttp.readyState==4 || xmlHttp.readyState==”complete”)的语句来判断的,但是多个返回容易产生冲突,前一个刚判断状态后一个数据就来了,结果后一个数据代替了前一个数据。

比较好的方法就是还是一次提交,在PHP页面上同时处理并按照一定格式归并在一起,比如:数据1|数据2|数据3|数据4……。然后再调用返回 数据的时候在JS代码中把数据分割开来,在将数据放入该数据本应该存放的位置。

处理代码如下:

1
2
3
4
5
6
7
8
9
10
11
function test()/*通过AJAX,检验输入数据的格式并返回相应的值*/
{
    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
    {
        var str=xmlHttp.responseText
        var reback=new Array()
        reback=str.split("-")
        document.getElementById("data1").value=reback[0]
        document.getElementById("data2").value=reback[1]
    }
}

chrome与IE的一些细微差别

相对于IE,chrome对网页代码要求更为严格,IE对于网页代码中的错误有很高的容错性。容错性好也就意味着兼容性相对更很出色。这里举两个例子

1、在一个页面通过POST方法提交变量到Sroan.php,而Sroan.php里使用get方法获取所要提交的方法,在IE中测试,IE可以返回正常,也就是容错了获取方法的不同。而在chrome中,获取的变量为空。

2、在chrome中路径”../Sroan.php”与”sroan.php”是不同的,前者等价于”../”,而在IE中两者是等价的。

加载图片的一些技巧

网页加载大图片往往需要等待很长时间加载完毕,这对于用户体验来说是一件十分不好的事情。目前主流方法是使用预读取,先读取一张粗略图(比较模糊的,体积也比较小)等大图加载完毕后,再替换回来。如果图片失效的话可以则加载无法显示的提示。具体代码如下(最精简的方法):

1
2
3
4
5
6
<img src="原始图片点知"  onerror='src="粗略图地址"';
style="display:none"
onload= 'load.style.display="none";this.style.display="";'/>
<div id="load"> <img src=/images/wait.gif" />

</div>

ASP代码进行图片盗链

使用方法:将代码保存为img.ASP上传到服务器,图片地址为img?url=XXXXXX

测试了很多解除图片盗链的代码,发现这个写得最好,不过盗链图片对于服务器来说开销相当于原来的两倍,更加好的方法是第一次盗链的时候保存一个缓存,第二次就直接调用缓存不用再读取远程图片了。

1
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
< %
Dim url, body, myCacheurl = Request.QueryString("url")Set myCache = new cache
myCache.name = "picindex"&url
If myCache.valid Then
body = myCache.value
Else
body = GetWebData(url)
myCache.add body,dateadd("d",1,now)
End IfIf Err.Number = 0 Then
Response.CharSet = "UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite body
Response.Flush
Else
Wscript.Echo Err.Description
End if'取得数据
Public Function GetWebData(ByVal strUrl)
Dim curlpath
curlpath = Mid(strUrl,1,Instr(8,strUrl,"/"))
Dim Retrieval
Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", strUrl, False,"",""
.setRequestHeader "Referer", curlpath
.Send
GetWebData =.ResponseBody
End With
Set Retrieval = Nothing
End Function'cache类class Cache
private obj 'cache内容
private expireTime '过期时间
private expireTimeName '过期时间application名
private cacheName 'cache内容application名
private path 'urlprivate sub class_initialize()
path=request.servervariables("url")
path=left(path,instrRev(path,"/"))
end subprivate sub class_terminate()
end subpublic property get blEmpty
'是否为空
if isempty(obj) then
blEmpty=true
else
blEmpty=false
end if
end propertypublic property get valid
'是否可用(过期)
if isempty(obj) or not isDate(expireTime) then
valid=false
elseif CDate(expireTime)<now then
valid=false
else
valid=true
end if
end propertypublic property let name(str)
'设置cache名
cacheName=str & path
obj=application(cacheName)
expireTimeName=str & "expires" & path
expireTime=application(expireTimeName)
end propertypublic property let expires(tm)
'重设置过期时间
expireTime=tm
application.lock
application(expireTimeName)=expireTime
application.unlock
end propertypublic sub add(var,expire)
'赋值
if isempty(var) or not isDate(expire) then
exit sub
end if
obj=var
expireTime=expire
application.lock
application(cacheName)=obj
application(expireTimeName)=expireTime
application.unlock
end subpublic property get value
'取值
if isempty(obj) or not isDate(expireTime) then
value=null
elseif CDate(expireTime)<now then
value=null
else
value=obj
end if
end propertypublic sub makeEmpty()
'释放application
application.lock
application(cacheName)=empty
application(expireTimeName)=empty
application.unlock
obj=empty
expireTime=empty
end subpublic function equal(var2)
'比较
if typename(obj)<>typename(var2) then
equal=false
elseif typename(obj)="Object" then
if obj is var2 then
equal=true
else
equal=false
end if
elseif typename(obj)="Variant()" then
if join(obj,"^")=join(var2,"^") then
equal=true
else
equal=false
end if
else
if obj=var2 then
equal=true
else
equal=false
end if
end if
end function
end class
%>

动态图片按ESC键停止的原理

先来看一张GIF图片,只要按下ESC键,图片就会停止在某一帧上。

这主要是因为ESC键的一个功能:浏览网页时,按一下”ESC”可以停止打开当前网页。

此外“Ctrl+Alt+Del”组合键可以调出windows任务管理器外,按下“Ctrl+Shift+Esc”组合键一样能启动任务管理器。 在VISTA下,“Ctrl+Shift+Esc”组合键是直接启动任务管理器,而不会再是繁琐的选项了。

Page 1 of 41234

Sroan日历

九月 2010
« 八 «-»  
 12345
6789101112
13141516171819
20212223242526
27282930  

按月索引文章

分类目录

最近评论