通过点击一个按钮ajax访问一个jsp页面
原本想是点击按钮的时候加载一个div 防止用户再点击
但现在是ajax访问的页面返回东西的时候那个div才出来。
但是奇怪的是加个alert语句的时候div能立即出来。
好了 废话不说了 看代码:
[code="java"]core.ajax = {
receivePacket:function(packet)
{
},
sendPacket:function(packet , process , aysncflag){
var sendUrl = packet.url;
var sendData = packet.data.data;
if(process ==null) process = doProcess;
if(aysncflag==null) aysncflag = false;
if(aysncflag == false){
loading();
}
$.ajax({
url: sendUrl,
data: sendData,
type:"POST",
async:aysncflag,
dataType:"html",
success: function(data){
eval(data);
process(response);
response = null;
},
error:function(data){
if(data.status=="404")
{
alert( "文件不存在!");
}
else if (data.status=="500")
{
alert("文件编译错误!");
}
else{
alert("系统错误!");
}
}
});
if(aysncflag == false){
unLoading();
}
},[/code]
[code="java"]function loading(){
var divHtml = "
在loading方法调用后加个alert能立即加载信息。
ps: [quote]在loading方法调用后加个alert能立即加载信息。[/quote]
alert是阻塞式,你在 loading后面执行alert就相当于阻止ajax执行而全力执行blockUI动画(记住是动画,是需要线程时间片段的,而javascript是单线程模式)。
[code="java"] if(aysncflag == false){
unLoading();
} [/code]
ajax是异步提交数据上面这句话应该要放在回调函数里写。
alert会阻塞所以你能看到加载信息。
在 $.ajax 的 beforeSend 事件里面判断并调用 loading()
你是用$.blockUI($("#lodingDiv")); 来显示等待框, blockUI不是阻塞执行而是队列。所以实际执行步骤可能如下: blockUI执行->ajax提交信息并等待->blockUI效果出现 .最后效果出现的时机取决于第二步ajax返回的速度,如果服务端立刻返回了,那么看起来效果就是ajax整个流程完了才出现 blockUI的效果。如果等待时间长(你可以在服务端弄个大循环模拟),那么blockUI应该就会出现早些。
alert()是阻塞javascript线程,而同步ajax不但阻塞js线程(不确定)也锁住浏览器。估计这个结果导致不但你无法和浏览器交互,浏览器也停止渲染动画什么的。
ajax异步,也就和其他代码同时执行啦