A文件通过Jquery Ajax 加载B到A文件的一个层中,显示等待框的问题
我想实现的功能室单击A页面的某个按钮加载B页面到A页面中的一个层中。
$.ajax({
type:"get",
url: "teach/teachingCenter.html",
dataType:"html",
timeout:1000,
async:false,
beforeSend : function(XMLHttpRequest){
$('.contentBox').html('');
//clickme为显示等待框方法
clickme(6);
},
success: function(data, textStatus){
$('.contentBox').html(data);
//clickhide()是关闭等待框方法
clickhide();
},
complete: function(XMLHttpRequest, textStatus){
},
error: function(){
//alert("load error");
clickautohide(5,600);
}
});
现在问题是用以上的方法根本不出现等待框..请问为什么?我放到服务器上也试过了,还特意在另外一个文件里面放了张很大的图,加载的时候确实慢了,但是在加载那页面的时候还是没有显示等待框。
我在success 中加了个延时执行的方法时beforeSend中的显示等待框方法就显示了,请问这是为什么? 难道不是先执行beforeSend的语句然后当ajax相应成功(也就是获取完文件后)然后再执行success中的语句吗?
$.ajax({
type:"get",
url: "teach/teachingCenter.html",
dataType:"html",
timeout:1000,
async:false,
beforeSend : function(XMLHttpRequest){
//$('.contentBox').html("加载中...");
//clickautohide(6,3000);
$('.contentBox').html('');
clickme(6);
},
success: function(data, textStatus){
setTimeout(function (){
$('.contentBox').html(data);
//加载完成关闭提示
clickhide();
},500);
},
complete: function(XMLHttpRequest, textStatus){
},
error: function(){
//alert("load error");
clickautohide(5,600);
}
});
------解决方案--------------------
应为你的ajax是同步请求的,同步请求会挂起js代码的执行,改成异步的,删除红色的语句
$.ajax({
type: "get",
url: "teach/teachingCenter.html",
dataType: "html",
timeout: 1000,
//async: false,
beforeSend: function (XMLHttpRequest) {
$('.contentBox').html('');
//clickme为显示等待框方法
clickme(6);
},
success: function (data, textStatus) {
$('.contentBox').html(data);
//clickhide()是关闭等待框方法
clickhide();
},
complete: function (XMLHttpRequest, textStatus) {
},
error: function () {
//alert("load error");
clickautohide(5, 600);
}
});
------解决方案--------------------
beforeSend 是自定义方法
被设定在 send 之前调用一下
if (!c.beforeSend
------解决方案--------------------
c.beforeSend.call(h, x, c) !== !1 && E !== 2) {
........
o.send(b, T)
只要不返回 false 程序就不会中断
注意这里不是异步调用,必须等 beforeSend 指向的函数运行结束,程序才会继续