2012-04-25 67 views
2

我正在使用这样的事情来通过jquery ajax获取图像。

$.ajax({ 
    url: imageurl, 
    type:'GET', 
    contentType: 'image/png', 
    success: success, 
    error: error, 
    timeout: 5000 
}); 

我可以看到我的请求头包括

访问控制请求报头:起源,内容类型,接受

在另一方面,如果我设置up像一个img元素

<img src="imageurl" ... 

并观察请求头我没有看到任何“Access Control R equest Headers“。

只是想知道$ .ajax()添加这个头的原因是什么。为什么它添加这个图像应该是一个有效的跨站点HTTP请求。这是一个很好的做法,甚至可能删除这个头?

+1

而不是去设置ajax请求的麻烦,为什么不只是使用src加载图像。您可以附加一个onload事件来处理您拥有的成功功能。类似这样的东西:http://stackoverflow.com/questions/4285042/can-jquery-ajax-load-image – scrappedcola 2012-04-25 22:57:36

+0

@scrappedcola谢谢,但我需要超时,所以我无法使用加载() – zero7 2012-04-26 01:11:26

回答

1

使用XMLHttpRequest访问的任何内容都将具有这些标题,无论它是否为图像。关键部分是请求的起源(一个脚本而不是'img'标签)。

这个头文件实际上是由浏览器创建的,所以,不,它不可能通过jquery删除它。

过去,脚本不允许执行跨站点HTTP请求,而这些标头是新的“跨源共享”功能的一部分。请参阅:https://developer.mozilla.org/en/http_access_control

请注意,它可能有可能通过使用jquery生成'img'标记,它可能会以您想要的方式操纵。我还没有尝试过,但它是值得一试..

+1

我只想第二个事实是,通过创建一个图片标签,我可以同时让Chrome和Firefox正确发送Origin头像。优秀的想法来生成图像标签。 – dougBTV 2014-03-27 00:34:17