ajax 实现倒计时问题?

seizetoday 2010-02-01 11:16:41
先看代码:

JS代码:


var xmlHttp;
function createXMLHttpRequest(){
if(window.ActiveXObject){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
}

function EndDate(date){
//var date=document.getElementById("hidDate").value;
createXMLHttpRequest();
var url="Ajax/ajax_endDate.aspx?date="+date;
xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange=Get_EndDate;
xmlHttp.send(null);
return false;
}
var i=1;
function Get_EndDate(){
if(xmlHttp.readyState==4&&xmlHttp.status==200){
var date=xmlHttp.responseText;
document.getElementById("end_date_").innerHTML=date;
}
}


页面代码:

<asp:Repeater ID="Repeater1" runat="server" EnableViewState="false">
<ItemTemplate>
<ul>
<li>
<img src='<%# Eval("proImage")%>' />
</li>
<li><a href="#">
<%# Eval("ProName")%></a> </li>
<li><span id='end_date_'>
<%# Eval("ProEndDate")%></span>
<input id="hidDate_" type="hidden" value='<%# Eval("proEndDate") %>' />

<script type="text/javascript">
EndDate('<%# Eval("proEndDate") %>');
setInterval('EndDate("<%# Eval("proEndDate") %>")',1000);

</script>

</li>
<li class="money_span">原价:<%# string.Format("{0:C2}", Convert.ToDecimal(Eval("ProMarketPrice")))%>
</li>
</ul>
</ItemTemplate>
</asp:Repeater>



问题是 现在我可以用ajax得到 返回的时间,可是Repeater内,只有第一个产品可以倒计时了。其实产品没反映,问题出在,我得不到 <input id="hidDate_" type="hidden" value='<%# Eval("proEndDate") %>' /> input 得ID,Repeater里的input的ID都是一样的。 我可以改变input的ID。但JS里面我又得不到ID了。请高手指教,先谢过了。
...全文
364 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
seizetoday 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 rock870210 的回复:]
没法解决,你方法都写死了,Ajax只调用传到同一个页面,返回也只有一个结果,你自己钻进自己的套子里去了,而且是个死胡同
这样做的效率也非常低,每一秒都要去更改数据库吗?况且如果客户端的网络不好的话,前面Ajax还没返回结果后面紧接着又发出来请求,不知道你想干嘛
如果只为了倒计时的话,还不如就在数据库取到数据后,减去当前时间,然后用js保存住每条信息的剩余时间,然后对每条时间做倒计时处理。根本就不用动数据库的
[/Quote]

谢谢,问题解决了,我没有每秒去改数据库,我把结束时间取出来后每秒把结束时间传至ajax页面相减,其实我是想 当客户端修改时间的时候,而页面上的倒计时不会随着他的修改而改变。我知道这些效率,但不知怎样来解决。
谢谢以上几位/。
Rock870210 2010-02-01
  • 打赏
  • 举报
回复
没法解决,你方法都写死了,Ajax只调用传到同一个页面,返回也只有一个结果,你自己钻进自己的套子里去了,而且是个死胡同
这样做的效率也非常低,每一秒都要去更改数据库吗?况且如果客户端的网络不好的话,前面Ajax还没返回结果后面紧接着又发出来请求,不知道你想干嘛
如果只为了倒计时的话,还不如就在数据库取到数据后,减去当前时间,然后用js保存住每条信息的剩余时间,然后对每条时间做倒计时处理。根本就不用动数据库的
seizetoday 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 rock870210 的回复:]
var date=xmlHttp.responseText;
date只有一个,全部赋值给了spanArray[i].value=date;
结果肯定是一样的了
[/Quote]

谢谢。那怎样解决呢。
Rock870210 2010-02-01
  • 打赏
  • 举报
回复
var date=xmlHttp.responseText;
date只有一个,全部赋值给了spanArray[i].value=date;
结果肯定是一样的了
seizetoday 2010-02-01
  • 打赏
  • 举报
回复
在线等,知道的说下啊。谢谢了。
xiuxiulinlin777 2010-02-01
  • 打赏
  • 举报
回复
好的,学习了。
seizetoday 2010-02-01
  • 打赏
  • 举报
回复
function EndDate(){
var date=document.getElementsByName("hidDate_");
for(var i=0;i<date.length;i++){
createXMLHttpRequest();
var url="Ajax/ajax_endDate.aspx?date="+date[i].value;
xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange=Get_EndDate;
xmlHttp.send(null);

return false;}
}


function Get_EndDate(){

if(xmlHttp.readyState==4&&xmlHttp.status==200){
var date=xmlHttp.responseText;
var spanArray=document.getElementsByName("end_date_");
for(var i=0;i<spanArray.length;i++){
spanArray[i].value=date;
}
}

}


setInterval("EndDate()",1000);


是我写错了还是什么问题,现在每个产品下面都有倒计时了,可是时间都一样。原本的时间肯定不一样的。
fwacky 2010-02-01
  • 打赏
  • 举报
回复
不懂,帮顶!
seizetoday 2010-02-01
  • 打赏
  • 举报
回复
试试看。
阿非 2010-02-01
  • 打赏
  • 举报
回复
<span id='end_date_'>

=>

<span name='end_date_'>


var date=xmlHttp.responseText;
document.getElementById("end_date_").innerHTML=date;
=>

var date=xmlHttp.responseText;
var spanArray=document.getElementsByName("end_date_");
for(var i=0,len=spanArray.length;i<len;i++)
{
spanArray[i].innerHTML=date;
}
seizetoday 2010-02-01
  • 打赏
  • 举报
回复
在线等,老师们帮帮忙啊。

62,264

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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