自己做了一个框架页面,利用一个框架异步通讯的结果控制另外一个页面的刷新,利用了以下两种办法都不成功:
第一种:
window.parent.frames["mainFrame"].location.reload;
第二种:
window.parent.frames["mainFrame"].location="do_something.asp?xxxx="+Math.random();如果指定框架里面不是do_something.asp的话,显然不能用第一种办法,用第二种办法是百发百中,没有问题。
出现问题的原因在于,如果指定框架里面的本来就是do_something.asp(功能是按照服务器端session标志变换输出结果),问题就出现了。那个xxxx="+Math.random()随机数参数是为了防止直接读缓存、不能及时更新添加的,可是没有效果。请大家帮忙找个解决办法,先谢谢了

解决方案 »

  1.   

    楼主用setTimeout设置一下就可以及时了
      

  2.   

    谢谢lieri111的关心,别用这种办法啊,并不是因为异步没有完成而不能及时刷新,和时间关系不大。
      

  3.   

    你把代码贴多一点,看看什么情况
    do_something.asp是动态赋值的吧?把那段代码贴出看看
      

  4.   

    非常感谢toury
    具体代码是这样的:if session("yy")=1 then
         输出内容1
    else
         输出内容2
    end if已经证明异步通讯成功修改了session("yy")后,刷新这个页面,结果没有按要求刷新,但是,在这个框架内点击右键“刷新”,则按预定要求显示。
    请帮忙解决!!!
      

  5.   

    window.dialogArguments.document...... 用这个
      

  6.   

    假设:
    if session("yy")=1 then
      输出内容1
    else
      输出内容2
    end if
    是do_something.asp的内容:
    do_something.asp:
    <script>
    function reloadme(){ location.reload();}
    </script>
    <%
    if session("yy")=1 then
      输出内容1
    else
      输出内容2
    end if
    %>
    在你写"window.parent.frames["mainFrame"].location="do_something.asp?xxxx="+Math.random();"的地方换成:
    top.frames["mainFrame"].reloadme();
    如果报错“缺少对象”之类的,你再顺着这个思路,一直找到代表do_something.asp这个页面对象为止
      

  7.   

    window.parent.parent.location.href="url";//这样呢?
      

  8.   

    谢谢你,toury关键是你没有考虑到这一点,如果这个框架里面原来不是do_something.asp这个页面呢?reloadme()就找不到了。而这个几率是相当高的
      

  9.   


    哦,是的,我忽视了。那么凡是需要刷新的页面你都就加上那个函数;如果只是do_something.asp需要刷新,那这样:
    try{top.frames["mainFrame"].reloadme();}
    catch(e){}
      

  10.   

    toury
    那就相当的多了,嘿嘿
      

  11.   

    <head>
    <meta http-equiv="refresh" content="刷新页面的间隔时间" />
    </head>这个应该是最简单的了
      

  12.   

    yanzhiyu230789
    不知道你注意到没有,如果有人在这个页面进行长时间的停留输入,你重载页面,是不是要命?这其实就是一个需要花时间的调查页面
      

  13.   

    那我顺便问以下,我的jsp 页面中,update图片之后,为什么必须刷新一次才能看到
    更新后的新的图片,能不能insert时候一样,不用手动刷新也能看得到结果?
      

  14.   

    你的嘿嘿,终于让我有点明白你的需求了:)
    那就给需要刷新的页面动态加上reloadme函数,然后再调用。这样就可以不必每个页面都手工修改了
      

  15.   

    toury,谢谢你,我的描述可能不清晰,让您误解了
      

  16.   

    这样再试试:
    1、只在do_something.asp页面加:
    <script>
    function reloadme(){ location.reload();}
    </script>2、然后,在框架页处判断一下页面是否do_something.asp:
    var url=top.frames["mainFrame"].location.href;
    if(url.indexOf('do_something.asp')!=-1){
      top.frames["mainFrame"].reloadme();
    }
      

  17.   

    谢谢你toury,这真是浏览器不统一情况下没有办法的办法.也不太复杂.
      

  18.   

    按照常规:
    window.parent.frames["mainFrame"].location="do_something.asp?xxxx="+Math.random();
    或:
    window.parent.frames["mainFrame"].location="do_something.asp?xxxx="+new Date().getTime();
    就应该没问题了。
    如果真不行,那只好采取其他另类办法。如果觉得那些另类办法都不可取,我是不知道改怎么办了,呵呵。