Javascript 未启动AJAX完整处理程序
在我的Web应用程序后端进行了一些艰苦的工作之后,我注意到GetMeasure请求需要10秒才能完成。我决定应用一个覆盖,这样潜在的用户就不会因为屏幕上什么都没有发生而感到困惑。不管请求是否成功,覆盖层都应该在调用后被删除——因此使用完整的处理程序应该是最好的选择——至少我认为是这样。我真的不明白为什么,但与成功处理程序相反,完整的处理程序不会被调用 AJAX请求:Javascript 未启动AJAX完整处理程序,javascript,jquery,ajax,events,Javascript,Jquery,Ajax,Events,在我的Web应用程序后端进行了一些艰苦的工作之后,我注意到GetMeasure请求需要10秒才能完成。我决定应用一个覆盖,这样潜在的用户就不会因为屏幕上什么都没有发生而感到困惑。不管请求是否成功,覆盖层都应该在调用后被删除——因此使用完整的处理程序应该是最好的选择——至少我认为是这样。我真的不明白为什么,但与成功处理程序相反,完整的处理程序不会被调用 AJAX请求: $_loadingCircle = $('<img id="loading" src="http://www.obergur
$_loadingCircle = $('<img id="loading" src="http://www.obergurgl.com/_images/layout/loading.gif"/>');
PopulateOverlay($_loadingCircle);
$.ajax({
url: 'CoDTracker/Home/GetMeasures',
type: 'POST',
dataType: "html",
data: {
buID: buid,
aID: aid,
lID: lid
},
success: function (data) {
$('#measures').html(data);
},
complete: function () {
$_overlay.remove();
}
});
$\u loadingCircle=$('');
PopulateOverlay($_loadingCircle);
$.ajax({
url:'CoDTracker/Home/GetMeasures',
键入:“POST”,
数据类型:“html”,
数据:{
buID:buID,
援助:援助,
盖子:盖子
},
成功:功能(数据){
$('#measures').html(数据);
},
完成:函数(){
$\u覆盖。删除();
}
});
请求以状态200(成功)结束,但覆盖不会被删除。我确信请求已完成,因为我的度量值已填充到页面中,而圆圈旋转得很疯狂,而不是消失
我做错什么了吗
编辑:
覆盖定义
function PopulateOverlay($content) {
$_overlay = $('<div class="overlay">');
$content.appendTo($_overlay);
$_overlay.appendTo('body');
}
函数PopulateOverlay($content){
$_叠加=$('');
$content.appendTo($\u覆盖);
$_overlay.appendTo('body');
}
您的$\u覆盖定义不正确。
请使用:
$_overlay = $('div.overlay');
有关更多信息,请参阅jQuery选择器:
选择具有特定类的div的方法不是复制整个
,而是像我在上面的示例中所做的那样
编辑:事实上,如果您进行此更改,您的PopulateOverlay将不再工作,因此您应该选择它而不将其分配给变量:
complete: function () {
$('div.overlay').remove();
}
您的$\u覆盖定义不正确。
请使用:
$_overlay = $('div.overlay');
有关更多信息,请参阅jQuery选择器:
选择具有特定类的div的方法不是复制整个
,而是像我在上面的示例中所做的那样
编辑:事实上,如果您进行此更改,您的PopulateOverlay将不再工作,因此您应该选择它而不将其分配给变量:
complete: function () {
$('div.overlay').remove();
}
因为覆盖是附加在DOM中的,所以应该使用.class
:
complete: function () {
$('.overlay').remove();
}
因为覆盖是附加在DOM中的,所以应该使用.class
:
complete: function () {
$('.overlay').remove();
}
首先,如果没有错误,这就是所有的代码,它应该可以正常工作。
让我们试着做一个例子,使用mimic
函数来模拟ajax complete的行为,我们可以这样编写:
var$\u overlay=null;//我们假设您在某个地方定义了它,并且它对您的所有函数都是可见的。
函数PopulateOverlay($content){
$_叠加=$('');
$content.appendTo($\u覆盖);
$_overlay.appendTo('body');
}
//将此视为延迟2秒的ajax调用。
函数模拟(cb){
设置超时(cb,2000);
}
功能工程(){
$someEle=$('example');
人口覆盖($someEle);
模拟(函数(){
$\u覆盖。删除();
});
}
$(函数(){
theWorks();
});代码>
.overlay{
显示:块;
宽度:100px;
高度:100px;
背景色:黑色;
}
.举例{
颜色:青色;
}
首先,如果没有错误,这就是您的全部代码,它应该可以正常工作。
让我们试着做一个例子,使用mimic
函数来模拟ajax complete的行为,我们可以这样编写:
var$\u overlay=null;//我们假设您在某个地方定义了它,并且它对您的所有函数都是可见的。
函数PopulateOverlay($content){
$_叠加=$('');
$content.appendTo($\u覆盖);
$_overlay.appendTo('body');
}
//将此视为延迟2秒的ajax调用。
函数模拟(cb){
设置超时(cb,2000);
}
功能工程(){
$someEle=$('example');
人口覆盖($someEle);
模拟(函数(){
$\u覆盖。删除();
});
}
$(函数(){
theWorks();
});代码>
.overlay{
显示:块;
宽度:100px;
高度:100px;
背景色:黑色;
}
.举例{
颜色:青色;
}
控制台中有任何错误吗?请告诉我们如何定义$\u overlay
,因为从上面的示例来看,这个变量(即对象)没有在任何地方定义。仅仅因为覆盖层没有被隐藏,并不意味着完成:
不会触发。事实上,我认为您的问题在于$\u覆盖层
。您可以通过添加console.log('helloworld!')来测试这一点complete:function(){}
中的code>是一个函数中的所有代码,您会多次调用该函数吗?我认为您在运行ajax请求时正在重新定义$\u overlay
,可能是通过多次调用PopulateOverlay()
来实现的。您的问题缺少控制台中任何错误的相关上下文?请告诉我们如何定义$\u overlay
,因为从上面的示例中,此变量(即对象)没有在任何地方定义。仅仅因为覆盖层没有被隐藏,并不意味着完成:
不会触发。事实上,我认为您的问题在于$\u覆盖层
。您可以通过添加console.log('helloworld!')来测试这一点complete:function(){}
中的code>是一个函数中的所有代码,您会多次调用该函数吗?我认为您在运行ajax请求时正在重新定义$\u overlay
,可能是通过多次调用PopulateOverlay()
来实现的。您的问题缺少相关的上下文,似乎OP想要定义一个新的div,而不是针对DOMOP中已经存在的任何div,实际上OP正在尝试两者兼而有之。div是使用PopulateOverlay函数创建的。一旦AJAX请求完成,它就会被删除。如果我自己做类似的事情,我会将
放在我的HTML中,但只是隐藏,然后在AJAX请求发出时使其可见