img标签是否向服务器发出异步请求?

时间:2012-10-29 13:47:59

标签: javascript html

如果在渲染页面之后我从javascript改变了img标签的src,如:

function changeImage(){
  img.src = 'getImage?imgId=232132'; //getImage is calling doGet() Method of Servlet   with  response content type "image/jpeg"
}

这是不是异步调用和加载图像?

4 个答案:

答案 0 :(得分:2)

是。 DOM修改触发的内容加载不会阻止JavaScript。

答案 1 :(得分:2)

是的,调用是异步的,除非它实际上不是远程调用,因为图像在缓存中(在这种情况下,图像将在执行脚本的下一行之前加载)。

如果您希望在完成后收到通知,请执行以下操作:

img.onload = function(){alert('loaded!')};
img.src = 'getImage?imgId=232132';

答案 2 :(得分:1)

最简单的答案是肯定的,它将以异步方式发生。但是,还有一点。

这个想法是你在javascript期间所做的只是修改它应该显示的页面的模型(DOM)。浏览器必须确保根据模型中的新规范来呈现页面,并且基本上在这种情况下包括下载图像。但是,浏览器执行此渲染的方式取决于浏览器,但它不应该阻止您的JavaScript。

事实上,我看到一些主流浏览器处理你所描述的情况的方式确实会有一个异步的图像请求,但直到你的javascript运行完毕之后才会这样。换句话说,如果您在忙碌的等待(while (true) {})中跟进它,则图像根本不会被加载。但是,如果要在更改图像的src后设置超时事件一秒钟,页面将解释新的src并完成图像的异步请求,但无法保证图像是否在第二次过去的时候已经完成装载。但是,其他浏览器可能会以不同的方式执行此操作,最好不依赖于您知道的行为以外的任何行为(它不会阻止您的javascript,如果您想在加载后执行某些操作,则甚至应该使用适当的DOM。

答案 3 :(得分:-1)

请设置您的文件标题。 如果你使用php,试试这个:

<?php
header("Content-type: image/jpeg");
?>
祝你好运