ajax同步请求的问题

document.getElementById("d").style.display = "";
ajax同步请求;
document.getElementById("d").style.display = "none";
为什么我的这个div根本没有显示。

[code="javascript"]

js文件请求类

// 把显示的单独拿出来
function show() {
document.getElementByI("d").style.display= "block";

}

function sendRequst(){

xmlhttp.open("GET","test1.txt",false);

xmlhttp.send();

document.getELementById ("myDiv").innerHTML=xmlhttp.responseText;

document.getElementById("d").style.display = "none";
if(xmlhttp.readyState == 4 && status == 200){

return true;
}
return false;

}

jsp页面
//先执行显示
文件请求类.show();
//再执行延迟
setTimeout(function() {
if(文件请求类.sendRequest()){
进行其他操作
}else{

}
}, 300);

[/code]

你在ajax中的回调函数中alert()一下。看看ajax请求执行完了没。

display=‘none’是隐藏
display=’block‘才是显示

把代码贴全吧

同步和异步只是请求方式不同吧,跟有没有回调函数有什么关系。。。
没有回调函数,你这个代码在哪里执行的?

循环里面什么事情都没做,这样循环执行太快了,没看到而已,加个alert就看到了
[code="javascript"]

function query(){ //alert('l'); document.getElementById("d").style.display= "block"; alert('1'); for(var i = 0 ; i < 2000000 ; i++){} document.getElementById("d").style.display = "none"; }




[/code]

我想知道你这是要干吗?
是想让这个DIV显示一下就隐藏这种效果吗?
那应该用setTimeout吧。
[code="javascript"]
function query(){

document.getElementById("d").style.display= "block";

var timename=setTimeout(function() {
document.getElementById("d").style.display = "none";
},2000);
}

[/code]

1 你现在的代码和AJAX木有任何关系
2 循环里面不做任何事情只是累加是很快的,很可能看不到效果
3 AJAX应该是这样,发送请求前将这个隐藏层显示出来,回调函数中将这个层再隐藏。

[color=red]*注意,这层的z-index要设置的比被遮住的层高,要不然也有可能在下面,看不到了。
[code="css"]
position: absolute;
z-index: 2
[/code][/color]

[quote]
xmlhttp.open("GET","test1.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
[/quote]
你说的是这个吧?最后一句document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
就相当于是回调函数。
上面你也看到了,加了alert就可以看到那个DIV显示出来了,说明显示与隐藏没有问题,你本地测试这段代码,请求与响应也是很快的,看不到效果很正常。
[code="javascript"]
var timename=setTimeout(function() {

document.getElementById("d").style.display = "none";

},2000);
[/code]
你延时2秒,肯定看到了呀!

[quote]
加alert和延迟是会看到。但是我现在ajax同步请求100条数据,不要隐藏的代码,效果就是我数据加载完了,才显示div的。感觉是执行了ajax完了,再去执行前面的显示代码的
[/quote]
哦,这个是因为你用的同步导致的。当你发送请求的时候浏览器就停止响应了,直到请求回复过来了,浏览器才接着做刚刚停止的事情。
虽然你把显示DIV写在了发送请求前面,但是当执行完显示DIV这句代码的时候,JS就继续往下执行,发送请求,而显示DIV这个事情正有浏览器在渲染(或者说显卡在做这个事情,这个事情就像IO一样会比较慢),但是这时JS已经执行到了发送请求,浏览器已经停止响应了,所以没看到。
不知道这样说您明白了没有,可能底层的事情并不是像我说的这么简单,但大概就是这么个意思。

你用异步的在回调函数里做就OK了。

[quote]
恩,应该是这个原理。但是我必须要用同步做。那是做不到这个效果了。
[/quote]

同步也可以,
[code="javascript"]
document.getElementById("d").style.display= "block";

var timename=setTimeout(function() {

xmlhttp.open("GET","test1.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
document.getElementById("d").style.display = "none";

},500);

[/code]
这样子就可以了吧,就是调用block之后,延迟个时间,让它显示之后再发请求

[quote]后面代码继续执行取返回数据this.jsonObj,这样第一次查询时取不到数据的[/quote]
我的意思是把之后所有的操作都放到延迟之后做。

你为什么不用异步的来做呢?