我们有一个图片上传对话框,允许用户通过AJAX更改他们的个人资料照片。它的工作原理如下:
1)用户点击“更新照片”操作。
2)对话框打开
3)加载当前配置文件图像,并且'load'事件触发cropper初始化
4)用户点击“上传新照片”
5)通过分段上传,响应使用新照片的cdn链接发回成功消息。
6)新的照片网址取代了对话框中的'src'图像(之前保存用户原始个人资料图像的图像)。
6)新照片加载,触发“加载”事件并初始化剪切器。
在我们的开发环境中,这样可以正常工作,但在生产中,第二个“加载”(在新的照片事件之后发生的事情永远不会发生,因此停止了对裁剪器的初始化。我正在使用Charles来将我们的javascript请求重新路由到我的本地机器,所以dev和prod使用完全相同的代码来执行。唯一的区别是环境(据我所知)。
要明确:在两种情况下上传都是成功的,并返回一个有效的URL,该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
仍未到达。