div的style.visibility在程序中不起作用的奇怪问题

bluefcxt 2008-11-13 09:30:49
程序是这样的 用ajax发送XML request返回一个图片URL显示出图片来 有一个隐藏的div内容是正在获取图片 我要ajax处理的过程中显示这个div 处理完毕再隐藏他
如果我单独用按钮控制div的style.visibility一点问题都没有 如果放在程序中就不起作用 后来发现如果我修改style.visibility之前alter他一下就可以 这是什么q情况?另外display:none这样我也试过也是同样的情况。

function ajax(){
document.getElementById("div1").style.visibility="visble";
var query="...";
var url="http://192.192.86.100/mapviewer/omserver?";
callServer(url, query);
}

function callServer(url, query){
var req = getXMLHttpRequest();
req.open("POST", url, false);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
req.onreadystatechange=function() {
try{
if (req.readyState == 4) {
if (req.status == 200) {
var text=req.responseText;
...
document.getElementById("div1").style.visibility="hidden";
...
...全文
724 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
汗!!那你解释解释,为什么改为异步就好了
bluefcxt 2008-11-13
  • 打赏
  • 举报
回复
不啊 我第一次修改visibility属性为visible的时候是在定义XML之前,还不涉及ajax但是这时候修改为visible就已经不管用了。
后面onreadystatechange方法里的visibility一直都没有问题可以正常控制显示隐藏。
  • 打赏
  • 举报
回复
倒,不跑题啊

你的这个本来就是AJAX的方式影响了啊
bluefcxt 2008-11-13
  • 打赏
  • 举报
回复
不影响的后面语句的执行
同步是等待返回responseText后才继续执行 异步只不过不等待就继续了
这个是ajax的问题,已经有点跑题了:)
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20081111/10/03bdbd4a-6016-4725-bf7f-f96077fb0614.html
  • 打赏
  • 举报
回复
当然影响了!!
你自己多试几个同步和异步的效果
你就知道了


req.readyState 你同步的话这个会出错的


给你看之前别人问的例子
bluefcxt 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 chinmo 的回复:]
var req = getXMLHttpRequest();
req.open("POST", url, false);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
req.onreadystatechange=function() {
try{
if (req.readyState == 4) {
if (req.status == 200) {
var text=req.responseText;
...
document.…
[/Quote]

哈,我也一直没注意,不过同步模式这样用也不影响,方法还是会执行的。
我现在只是奇怪我在第一次修改visibility属性为visible的时候还不涉及ajax,为什么同步异步模式会影响到他。
先给分吧。
bluefcxt 2008-11-13
  • 打赏
  • 举报
回复
之前一直没注意用的是同步模式,确实改为异步模式放在哪都可以了
不过我还是很费解为什么同步模式下有这样的问题,按流程来说修改visibility属性的时候还没开始request发送,为什么和ajax有关系呢
  • 打赏
  • 举报
回复
var req = getXMLHttpRequest();
req.open("POST", url, false);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
req.onreadystatechange=function() {
try{
if (req.readyState == 4) {
if (req.status == 200) {
var text=req.responseText;
...
document.getElementById
晕,刚才都没注意
你这里有错

req.open("POST", url, false); 用这个无法使用req.onreadystatechange等

所以改成req.open("POST", url, true);
bluefcxt 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 kindwell 的回复:]
把document.getElementById("div1").style.visibility="visble";
放到if (req.readyState == 4) {
的else里试试。
[/Quote]

还是不行T_T
cgisir 2008-11-13
  • 打赏
  • 举报
回复
改成异步就行了
req.open("POST", url, false);
req.open("POST", url, true);
kindwell 2008-11-13
  • 打赏
  • 举报
回复
把document.getElementById("div1").style.visibility="visble";
放到if (req.readyState == 4) {
的else里试试。
bluefcxt 2008-11-13
  • 打赏
  • 举报
回复
我为啥不能修改自己的帖子啊。。郁闷
bluefcxt 2008-11-13
  • 打赏
  • 举报
回复
笔误 那行我删了刚才自己写的
肯定不是速度太快的问题 我说了我ajax处理request最少要3-5秒时间 处理之前显示 处理完成后才隐藏
我alert也是在修改visibility为visible之前
手写 2008-11-13
  • 打赏
  • 举报
回复
visible
cgisir 2008-11-13
  • 打赏
  • 举报
回复
document.getElementById("div1").style.visibility="visble";
应该是 visible
  • 打赏
  • 举报
回复
这个是速度太快,看不出效果,你加一个延时即可
cftea 2008-11-13
  • 打赏
  • 举报
回复
分别改为:
setTimeout("document.getElementById('div1').style.visibility='visble';", 50);
setTimeout("document.getElementById('div1').style.visibility='hidden';", 50);
bluefcxt 2008-11-13
  • 打赏
  • 举报
回复
修改为visible之前如果alert(document.getElementById("div1").style.visibility)一下 接着div1就会显示出来 然后ajax处理完后隐藏 如果没有alert就不行 也就是说后面这一句没问题
后来我试了先隐藏后显示 一样是在开始的时候不能隐藏 alert后可以 很奇怪
bluefcxt 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 varlj 的回复:]
看你的IP是局域网吧,速度太快没看出来吧(你说了,改变前alert是能看到的,说明确实修改可见性了)
[/Quote]
我这个request处理的时间比较长 最少有3-5秒时间
加载更多回复(4)

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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