在jQuery Form中,在" beforeSubmit"完成之前调用"成功"
时间:2020-03-06 14:45:28 来源:igfitidea点击:
我正在使用jQuery Form插件上传图像。我已经分配了一个淡入淡出的动画来执行beforeSubmit回调,但是由于我在本地运行,因此没有时间完成调用success函数的过程。
我在我的fade();调用中使用了一个回调函数,以确保在下一个渐变开始之前完成一个渐变,但这似乎不能保证调用它的函数已经完成。
难道我做错了什么?在提交ajax调用之前,beforeSubmit是否不应该完成?
这是两个回调:
提交前:
function prepImageArea() {
if (userImage) {
userImage.fadeOut(1500, function() {
ajaxSpinner.fadeIn(1500);
});
}
}
成功:
function imageUploaded(data) {
var data = evalJson(data);
userImage.attr('src', data.large_thumb);
ajaxSpinner.fadeOut(1500, function() {
userImage.fadeIn(1500);
});
}
解决方案
我认为我们可能对那些淡入淡出的动画太喜欢了:)...在beforeSubmit中,设置了fadeOut,但是该函数立即返回,导致提交发生。我猜上载时间不到3秒,导致新图像在动画制作完成之前就出现了。
因此,如果我们真的想要这种效果,则需要进行图像淡入,微调器淡入,并在完成触发上传后进行。像这样的东西:
if (userImage) {
userImage.fadeOut(1500, function() {
ajaxSpinner.fadeIn(1500, function(){
//now trigger the upload and you don't need the before submit anymore
});
});
}
else {
// trigger the upload right away
}
即使在提交表单之前调用了beforeSubmit回调,但userImage.fadeOut函数是同步的(即它生成一个单独的执行线程来执行渐变动画然后继续执行)并立即返回。淡入淡出的动画需要1.5秒才能完成,并且当我们在localhost上运行时,ajax响应的返回速度比1.5秒要快,因此我们不会看到该动画,在现实世界的应用程序中,ajax请求通常不会少于1.5秒,所以你很好:)

