Ruby on Rails:使用带有Ajax调用的send_data显示ascii而不是image

时间:2011-05-02 21:17:41

标签: ruby-on-rails ajax image

我正在link_to_remote来电中阅读图片,然后使用send_data 我发送读取的图像为

:type => "image/png" :disposition => 
"inline"

但是当div标签更新时,我只看到ascii字符 但如果我使用正常呼叫(link_to)进行相同的操作,我会看到它 功能正常。有人可以解释一下吗?

我的观点:

<%= link_to_remote("flip",
     :update => "img",
     :url => {:action => "flip"}
     )%>
<div id="img"></div>

控制器:

def flip
   filename="/public/picture/filename/1/scaler_1.jpg"
    img=File.read(filename)
    ilist = Magick::ImageList.new
    @picture=ilist.from_blob(img)
    @picthumb=@picture.flip!
    @out=@picthumb.to_blob
    send_data(@out,:filename =>'workshopimage', :type => "image/png", 
:disposition => "inline")
end

以上不起作用 但我的观点是

<%= link_to("flip",
     :action => "flip"
     )%>

它有效......所以这并不意味着我需要更多地做一些事情 ajax打电话..我错过了什么..?

由于 Shaunak

PS:上面的问题是其他一些论坛的其他帖子的另一篇文章的复制粘贴尚未得到答复。我的问题完全相同,只是我使用粗暴的图表。取自:http://lists.rubyonrails.org/pipermail/rails/2006-May/041499.html

3 个答案:

答案 0 :(得分:2)

您不希望为此更改link_to_remote,您需要更新图片的src属性以指向该网址:

link_to_function "flip", "myImage.src = '" + url_for(:action => "flip") + "'"

答案 1 :(得分:1)

这是我如何使用robbit给出的提示解决这个问题:

<div id = "graphDiv">

<%= link_to_function("show", " var i = document.createElement('img'); i.src = '" + show_graph_hcfcd_url(1) + "'; $(graphDiv).appendChild(i); ") %>

答案 2 :(得分:0)

Robbrit的回答非常有用,但我发现解决方案只适用于Chrome,而IE8和Firefox则失败了。单击链接时,无法更新图像。您有什么看法,特别是在IE和Firefox中?

我找到了解决方案,仍然使用robbrit提供的方法。在IE8和Firefox下使用src=url?+Math.random()即可。