【发布时间】:2015-05-20 17:22:32
【问题描述】:
我有以下标记:
用户可以选择一个图片资源,该图片资源将上传到服务器并作为div容器的背景图片显示在表单顶部。
<div id="self" style="background-image: url(self.jpg)"></div>
<form id="photo_upload" enctype="multipart/form-data" action="/photo" method="post">
<input type="file" id="select_photo" name="photo" />
</form>
我希望在上传新图片后立即重新加载背景图片。我在图像 URL 中添加时间戳以强制重新加载。
$(document).ready(function() {
function reloadBackground(tag) {
// get background image source
var source = tag.css('background-image').slice(4, -1);
var index = source.lastIndexOf('?');
if (index > -1) {
// remove time stamp
source = source.substring(0, index);
}
var image = new Image();
image.onload = function() {
// set new background image source
tag.css('background-image', 'url(' + image.src + ')');
}
// add time stamp to force reload
image.src = source + '?t=' + (new Date().getTime());
}
$('#select_photo').change(function() {
$('#photo_upload').ajaxSubmit({
error: function(response) {
console.error(response.status);
},
success: function(response) {
reloadBackground($('#self'));
}
});
});
});
问题来了:
我第一次选择并上传新图像时,背景图像不会改变。选择另一张照片后,背景图像会更改为显示之前上传的照片等。但是,如果我手动重新加载页面,则会显示正确的(即最后上传的)图像。看来 reloadBackground() 调用得太早了。
你知道出了什么问题吗?
谢谢!
编辑:
为了完整起见,这是 nodeJS 提供图像的方式:
app.get('/self.jpg', function (req, res, next) {
res.sendFile(user.id + '.jpg', {
root: uploadDir
}, function (error) {
if (error) {
console.log(error);
res.status(error.status).end();
}
});
});
【问题讨论】:
标签: javascript html ajax node.js