在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秒,所以你很好:)