ASP动态显示图片怎么这么难啊???!!!

greatmj001 2011-04-16 07:50:41
以下是ASP文件,姑且命名为:test1.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
<title>显示图片</title>
</head>
<style>
a{ benc:expression(this.onmouseover=_mouseover)}
</style>
<body>

<table border="0">
<tr>
<td id="img_td" style="display:none">
<input type=hidden value=<%=Request.QueryString("A") %> id="A" name="A"/>
</td>

<td id="inner_td"></td>
</tr>
</table>
</body>

<script language="javascript">
onload_();

function onload_()
{
var file=document.getElementById("A").value;
var inner_=document.getElementById("inner_td");
var img_arr=new Array();

for(var i=1;i<=10;i++)
{
var num=i<10?"0"+i:i;
file = file.substring(0, 17);
var src_= file+"/"+file+"-"+num+".jpg";
var w=0;
var img=new Image();
img.src=src_;
w=img.width;
if(w>0)
{
img_arr[i-1]=new Array(src_);
}
}
//alert(src_);
var inner_str="";
for(var i=0;i<img_arr.length;i++)
{
inner_str+='<a href=' + img_arr[i] + ' target=_blank><img src="'+img_arr[i]+'" width="100" height="80"/></a>'
}
inner_.innerHTML=inner_str;
}



function _mouseover()
{
return window.status="";
}

</script>

</html>



建个虚拟目录"test1"后,将这个文件挂上去,然后再浏览器里调用:
http://xxx.xxx.xxx.xxx/test1/test1.asp?A=pic

这个页面想要达到的目的是,将虚拟目录test1下的某个子目录里的图片显示出来(图片数量不定,最多10张)

“某个子目录”即由参数A指定,例如A=pic;
子目录里的图片命名规则是:子目录名 + “-01”(-02,-03)+ “.JPG”;例如:子目录pic里的图片是:pic-01.jpg,pci-02.jpc, 等;

在我测试时,发现以下几个问题:

1.首次载入test1.asp时,图片不会显示,再次刷新后,图片就出来了!
我检查了C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files,在第一次载入时,图片是下载下来了,但是死活显示不了,一定要刷新才能显示
我KAO, 这是什么道理啊~~~~~

2.如果子目录里有3个图片,然后,我删除第3个,再刷新页面,这个删除的地方,就是个红叉
任我如何清空缓存,这个红叉始终显示!怎么这么弱啊~~~~

3.如果我将子目录下的文件替换,刷新页面后,仍然是旧的图片,清空缓存后,才能显示新的!
GOOGLE的一堆内容,都说是缓存的问题,网上说的好几个方法,例如:
1)增加以下内容:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">

2)文件名后面跟个随机数

本人试过了,以上2个方法统统不起作用!!!泪奔~~~


******************************************************************

各位达人啊,有谁能解决这些问题啊!我快崩溃啦!!!
...全文
363 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
greatmj001 2011-04-19
  • 打赏
  • 举报
回复
谢谢各位大侠的帮助,好像上面有不错的方案!
greatmj001 2011-04-18
  • 打赏
  • 举报
回复
楼上:
我之所以这样写,是因为子目录里,图片数量不定,
不知道是不是有更好的方法,将没有连接的图片不显示出来
  • 打赏
  • 举报
回复
var w=0;
var img=new Image();
img.src=src_;
w=img.width;
if(w>0)
{
img_arr[i-1]=new Array(src_);
}

你的问题估计是出在这里,这部分先不要直接去掉
直接保存到这样保存img_arr[i-1]=src_;
greatmj001 2011-04-18
  • 打赏
  • 举报
回复
星期一,大家都回来了吧~~
一起来解决问题赚分吧~~(*^__^*) 嘻嘻……
ycproc 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 woaixiayutian 的回复:]

你把这个调用方法的放到body onload="onload_()"试试吧
[/Quote]

+1
ycqvb 2011-04-18
  • 打赏
  • 举报
回复
给你一个现成的,把不需要显示的改一下就行了。

 <% 
' 设定一个演示目录,:)
CONST DirectorY = "image"
' 用常数定义排序方式
CONST FILE_NAME = 0 '按照名字排序……依次类推
CONST FILE_EXT = 1
CONST FILE_TYPE = 2
CONST FILE_SIZE = 3
CONST FILE_CREATED = 4
CONST FILE_MODIFIED = 5
CONST FILE_AccessED = 6
'获得 排序命令,默认为按照名字排序
req = Request("sortBy")
If Len(req) < 1 Then sortBy = 0 Else sortBy = CInt(req)
req = Request("priorSort")
If Len(req) < 1 Then priorSort = -1 Else priorSort = CInt(req)
'设置倒序
If sortBy = priorSort Then
reverse = true
priorSort = -1
Else
reverse = false
priorSort = sortBy
End If

' 接下来开始我们真正的代码了。。。
path = Server.MapPath( DIRECTORY )
Set fso = CreateObject("Scripting.FileSystemObject")
Set theCurrentFolder = fso.GetFolder( path )
Set curFiles = theCurrentFolder.Files
' 给这些文件做一个循环
Dim theFiles( )
ReDim theFiles( 500 ) ' 我随便定的一个大小
currentSlot = -1 ' start before first slot
' 我们将文件的所有相关信息放到数组里面
For Each fileItem in curFiles
fname = fileItem.Name
fext = InStrRev( fname, "." )
If fext < 1 Then fext = "" Else fext = Mid(fname,fext+1)
ftype = fileItem.Type
fsize = fileItem.Size
fcreate = fileItem.DateCreated
fmod = fileItem.DateLastModified
faccess = fileItem.DateLastAccessed
currentSlot = currentSlot + 1
If currentSlot > UBound( theFiles ) Then
ReDim Preserve theFiles( currentSlot + 99 )
End If
' 放到数组里
theFiles(currentSlot) = Array(fname,fext,ftype,fsize,fcreate,fmod,faccess)
Next
' 现在都在数组里了,开始下一步
fileCount = currentSlot ' 文件数量
ReDim Preserve theFiles( currentSlot )
' 排序
' (8 表示 string)
If VarType( theFiles( 0 )( sortBy ) ) = 8 Then
If reverse Then kind = 1 Else kind = 2 ' 给字符排序
Else
If reverse Then kind = 3 Else kind = 4 '数字、时间。。。
End If
For i = fileCount TO 0 Step -1
minmax = theFiles( 0 )( sortBy )
minmaxSlot = 0
For j = 1 To i
Select Case kind
Case 1
mark = (strComp( theFiles(j)(sortBy), minmax, vBTextCompare ) < 0)
Case 2
mark = (strComp( theFiles(j)(sortBy), minmax, vbTextCompare ) > 0)
Case 3
mark = (theFiles( j )( sortBy ) < minmax)
Case 4
mark = (theFiles( j )( sortBy ) > minmax)
End Select
If mark Then
minmax = theFiles( j )( sortBy )
minmaxSlot = j
End If
Next
If minmaxSlot <> i Then
temp = theFiles( minmaxSlot )
theFiles( minmaxSlot ) = theFiles( i )
theFiles( i ) = temp
End If
Next
' 结束
%>
<FORM Name="doSort" Method="Get">
<INPUT Type=Hidden Name=priorSort Value="<% = priorSort %>">
<INPUT Type=Hidden Name=sortBy Value="-1">
</FORM>
<SCRIPT Language="javascript">
function reSort( which )

{
document.doSort.sortBy.value = which;
document.doSort.submit( );
}
</SCRIPT>
<CENTER>
<FONT Size="+2">
<% = path %>该目录下的文件数量共计:<% = (fileCount+1) %>个
</FONT>
<P>
单击排序,再点一次反向排序
<P>
<TABLE Border=1 CellPadding=3>
<TR>
<TH><A HREF="javascript:reSort(0);">文件名</A></TH>
<TH><A HREF="javascript:reSort(1);">扩展名</A></TH>
<TH><A HREF="javascript:reSort(2);">类型</A></TH>
<TH><A HREF="javascript:reSort(3);">大小</A></TH>
<TH><A HREF="javascript:reSort(4);">建立时间</A></TH>
<TH><A HREF="javascript:reSort(5);">上次修改时间</A></TH>
<TH><A HREF="javascript:reSort(6);">上次存取时间</A></TH>
</TR>
<%
For i = 0 To fileCount
Response.Write "<TR>" & vbNewLine
For j = 0 To UBound( theFiles(i) )
Response.Write " <TD>" & theFiles(i)(j) & "</TD>" & vbNewLine
Next
Response.Write "</TR>" & vbNewLine
Next
%>
</TABLE>
sxldfang 2011-04-18
  • 打赏
  • 举报
回复
加一句,看看输出的啥?


var num=i<10?"0"+i:i;
file = file.substring(0, 17);
var src_= file+"/"+file+"-"+num+".jpg";
alert(src_);

toury 2011-04-18
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
<title>显示图片</title>
</head>
<style>
a{ benc:expression(this.onmouseover=_mouseover)}
</style>
<script>
var dir=location.search.split('=')[1];alert(dir)
var img_arr=new Array();
for(var i=1;i<=10;i++){
var n=i<10?"0"+i:i;
var _src= dir+n+".jpg";
var w=0;
var img=new Image();
img.src=src_;

img.onload=function(){//你要等到图片加载完成后才能取其属性
if(img.width>0)}{ img_arr.push(img); }
}
}
</script>
<body>
<a href='?a=pic'>aaaaaaa</a>
<table border="0">
<tr>
<td id="img_td" style="display:none"></td>
<td id="inner_td"></td>
</tr>
</table>
</body>

<script language="javascript">
window.onload=function(){
var inner_str="";
for(var i=0;i<img_arr.length;i++){
inner_str+='<a href=' + img_arr[i] + ' target=_blank><img src="'+img_arr[i]+'" width="100" height="80"/></a>'
}
document.getElementById("inner_td").innerHTML=inner_str;
}

function _mouseover(){ return window.status=""; }
</script>

</html>
  • 打赏
  • 举报
回复
用数组保存不就img_arr[i-1]=src_;
可以了么?
关确定不确定啥事哦?
greatmj001 2011-04-18
  • 打赏
  • 举报
回复
继续求教~~
greatmj001 2011-04-17
  • 打赏
  • 举报
回复
继续求解~~~
greatmj001 2011-04-16
  • 打赏
  • 举报
回复
body onload="onload_()"

这方法也不行~~~
woaixiayutian 2011-04-16
  • 打赏
  • 举报
回复
你把这个调用方法的放到body onload="onload_()"试试吧

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧