我们有一个图像上传对话框,允许用户通过 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
仍然没有达到。