我现在在做一个音乐网站,A页面有很多歌曲链接,当点击歌曲链接时,打开B页面,B页面是一个音乐盒,可以播放我在其他页面选中的歌曲。如果是由A页面打开B页面,这样可以通过父页面控制子页面的方式来控制B页面。如果我又有一个C页面,C页面中也有很多歌曲,当点击歌曲后,我不想再打开一个新的音乐盒页面,而是想把音乐添加到已经打开的B页面中,这样就要判断B页面是否已经被打开,且通过控制B页面把音乐加到音乐盒中。我想问的是:1> C页面和B页面并不是两个父子关系的页面,怎么在C页面中判断B页面是否被打开?(我想的是在session中添加一个值,来判断B页面是否被打开)2> 怎么通过C页面控制B页面(注意,c页面和B页面不是父子关系)?谢谢各位大侠了,非常感谢。

解决方案 »

  1.   

    1.在B页面添加一个 ‘添加音乐’ 功能,啥问题都好解决了
    2.B页面写一个函数,每隔1秒钟就请求一下后台,看有没有新的音乐添加到session,如果有就刷新音乐列表,但是这样不断请求,用户数多了后不知道服务器扛不扛得住
      

  2.   

    谢谢二楼的回答,你说的是用Ajax访问服务器,根据判断添加歌曲。
    我现在已经实现了从A页面向B页面添加音乐的功能,A页面与B页面是父子关系,可以完成交互控制,这样就不用Ajax了。
    如果我有一个C页面,C页面与B页面不是父子关系,C页面该怎么控制B页面?
      

  3.   

    如2L说的,B页面每隔10s就向后台发送一个请求侦听是否有添加新的音乐。
    C页面点击歌曲后,向后台发送信息表明添加了XX音乐,这时候B页面就能侦听到有添加新音乐,后面就是B页面添加播放的音乐的操作了。
      

  4.   

    1.创建一个session("music_list"),存放音乐列表
    2.C页面添加一首音乐,更新session
    3.B页面设置一个函数,每隔1秒钟访问后台,读取session里的list,和B页面当前的list对比,如果发现有新的记录,ajax返回新的记录,然后添加到B页面的list中。通过后台的逻辑,将B和C联系起来
      

  5.   

    楼上的方法开销太大了吧!C和B不是父子关系,那么C页面是怎么打开的呢?直接输入浏览器地址?百度mp3播放器也不能保证只打开一个播放器,建议你暂时放弃吧.
      

  6.   

    不明白楼上的意思
    不是一个session吗,打开B页面前判断session中的标记值,如果标记值标明B已打开,直接调用本地打开的B页面中的添加歌曲的方法就可以了吧,是不是你不会调用已经打开的IE吗?B页面关闭时改写session中的标记值。如果还不明白,请再次提问!
      

  7.   

    你都说了用session了,还再考虑什么父子关系,用session好比就是一个家谱,考虑的是全局的东西,跟你说的父子关系没关系。
      

  8.   

    <a href="****" target="_namedTaget">Link</a>
      

  9.   

    楼上说得不行,这样会刷新页面,中断当前正在播放的文件.to上上楼,用session没问题,关键是浏览器端怎么知道用户添加了歌曲,如果定时刷新,会增加系统压力
      

  10.   

    谢谢大家的回答。
    但是我要说的,用ajax去访问session的方式我早就想到了,但是我不想这么用,我想通过在客户端完成添加歌曲的操作,原因如楼上所说,怕服务器承受的问题。
    我只能实现父页面向子页面或同一个页面添加音乐的功能,无法实现非父子页面间的交换。请各位大侠帮帮忙,把问题的重点放在客户端,而不是放在服务器端(ajax访问session),谢谢,如能解决这个问题,我定当焚香叩首,感激涕零!!!!!!!!!!!突然想起一点来,用javascript控制cookies,存取cookies,这个方法如何?没试过,试试再说。
      

  11.   

    1.cookie和session的原理都差不多的,一样要通过服务器
    2.就算你可以解决当前的问题,那么后续你还有很多问题需要解决,比如添加音乐成功或失败,你是不是要给C页面返回一个提示信息;用户如果重复添加一首歌曲,你是不是要进行判断……以后B C页面交互的地方多了,这么做只会给你徒添烦劳罢了
    3.建议还是在B页面增加一个  添加音乐 功能,用户可能是从A页面打开的C页面,也可能是从D页面打开的C页面,干脆限制用户只能通过在B页面打开C吧,这样很多事情处理起来都很方便
      

  12.   

    这个问题,我自己解决了,用javascript操作cookie就可以了。
    其实这个问题的关键就是多个页面之间如何共享一个变量,如果不用服务器端提供的session等,在客户端就只能使用cookie了。
    用session的话、服务器端的肯定吃不消。
    用cookie的话,有的人肯能会钻牛角尖,比如说cookie最大容量为4k,这个很容易解决,一遍加一遍删,音乐盒每次取用cookie后就会删除cookie中的songlist的值,添加音乐时只需把音乐的id和url添加到songlist中即可,我测了一下,cookie中可以装100-200条id+url的值,当然也不可能每次都添加100条以上的值,顶多50条(因为我限制了一下)。
    2.有的人会说要是客户端禁用cookie怎么办?但是有一点要注意的是,没有cookie的情况下,大部分情况是用不了session,因为sessionid存放在cookie中,(除非你编码时再url后添加sessionid,相信很多人在做网站时未必会注意这一点吧)。
    这就是我的解决方法,我只是刚进入j2ee的菜鸟,很多地方没有经验,想到什么就做什么,没有这么多的估计,不足之处,请各位大侠们指出,谢谢大家了,非常感谢。
      

  13.   

    我查看了1ting音乐网站的cookie,发现每次添加歌曲时,cookie中都会出现很多与歌曲有关的数字串,可能是歌曲的id,而且我用cookie实现这个功能后,测试了一下,发现与1ting或九酷音乐网站添加歌曲的方式基本一致,所以基本可以断定我的实现是正确的。谢谢大家的回答。也许有时我们的思想太过局限,所以在解决此类问题时总是会想着我们常用的那些东西(比如session等这些),换种思维,大胆的尝试一下未必不是一种解决办法,刚开始使用常规方法解决这个添加音乐的功能时,我用了大半天也没解决,后来想到用cookie后,一两个小时就搞定了。总之,谢谢大家的回答,非常感谢。