0

我们有一个图像上传对话框,允许用户通过 AJAX 更改他们的个人资料照片。它是这样工作的:

1) 用户点击“更新照片”动作。

2) 对话框打开

3) 加载当前配置文件图像,并且“加载”事件触发裁剪器初始化

4) 用户点击“上传新照片”

5)通过分段上传,响应返回成功消息,带有新照片的cdn链接。

6) 新照片 URL 替换对话框中图像的“src”(以前保存用户原始个人资料图像的图像)。

6)新照片加载,触发'load'事件并初始化cropper。

在我们的开发环境中,这工作正常,但在生产中,第二个“加载”(在新照片事件之后发生的那个永远不会触发,因此在裁剪器的初始化之前停止。我正在使用 Charles 重新路由我们的 javascript对我本地机器的请求,所以 dev 和 prod 使用完全相同的代码来执行。唯一的区别是环境(据我所知)。

需要明确的是:上传在这两种情况下都是成功的,并返回一个有效的 URL,确认链接到刚刚上传的图像。据我所知,唯一的问题是 prod 中的新图像永远不会触发“加载”事件。除了 IE9,我也无法在任何浏览器中产生此错误。

想法?

例子:

// How the image load event is bound
$image.on('load', handleImageLoad);

// How the image is being set (src is provided on upload-success):
$image.attr('src', src);

// handleImageLoad is called after image upload in dev, but not in prod

测试:

为了测试这个imageEl.complete理论,我设置了这个代码:

  interval = setInterval(function () {
    if ($image[0].complete) {
      handleImageLoad();
      clearInterval(interval);
    }
  }, 0);

handleImageLoad仍然没有达到。

4

0 回答 0