的jQuery
$.ajax({
type: 'GET',
url: 'externalData.html',
success: function( result ) {
$("#divToFill").html(result);
targetDiv = "#target1" ;
$('body').attr('target_height', $(targetDiv).height()); // PROBLEM !
},
async: false
});
externalData.html
<div id="target1">
<a href="">
<span class="imageBox">
<img class="displayimage" src="img/dummy.jpg">
</span>
<strong class="productname">product</strong><em class="productinfo">info</em>
<span class="priceBox">
<span class="price">9,95 €</span>
</span>
</a>
</div>
问题是,在加载图像之前,targetDiv的高度是calculatet。有时我得到50px而不是180px的高度。
&#39; html的()&#39;应该是同步的,并且&#39; async:false&#39;还应强制在加载数据后触发成功事件。我还能做什么?
答案 0 :(得分:1)
加载图像与ajax-call无关,你只需要时间来加载图像,就像加载页面时一样(当你使用window.onload
确保一切都被加载时)。
您可以使用document.getElementById(imageID).complete
,我的结果非常可靠:
$.ajax({
type: 'GET',
url: 'externalData.html',
success: function( result ) {
$("#divToFill").html(result);
targetDiv = "#target1";
imageID = "imageID"; //so you need to give your image an ID
getHeight(targetDiv,imageID);
},
async: false
});
function getHeight(targetDiv, imageID) {
if (document.getElementById(imageID).complete) { //this checks whether the image has finished loading
$('body').attr('target_height', $(targetDiv).height());
} else {
setTimeout(function(){getHeight(targetDiv,imageID);},5);
}
}
答案 1 :(得分:0)
唯一合适的解决方案是等到图像完成加载(除非您事先知道图像尺寸,在这种情况下,只需在CSS中手动指定)然后做任何你想做的事。
这可能有点棘手,因为有许多浏览器警告使得很难检测到何时加载图像。幸运的是,你可以使用this - 确保在.html之后立即创建事件监听器,并将其余的回调放在imagesloaded回调函数中。
答案 2 :(得分:0)
你需要等到图像加载...因为你可以放置图像加载的条件,然后获得目标div的高度。