在JS回调中接收来自rails 4.0的流

Recieving a stream from rails 4.0 in JS callback

本文关键字:rails 的流 JS 回调      更新时间:2023-09-26

我正在尝试将图像文件从服务器传输到客户端,但我的javascript回调在流关闭之前变得活跃,我这样做是因为在传统的render json中发送它:超时并且需要很长时间。流花费的时间要少得多,但是i keep不能在回调触发之前获得所有的数据。

控制器代码
   def mytest
    image=ImageList.new(AssistMe.get_url(image_url))
    response.stream.write image.export_pixels(0, 0, image.columns, image.rows, 'RGBA').to_s
    response.stream.close
   end
javascript

 var getStream, runTest;
 runTest = function() {
 return $.post('/dotest', getStream);};
 getStream = function(params) {
    return document.getElementById('whatsup2').innerHTML = 
  "stream is here " +     params.length;};

响应是一个数组,我可以通过在前面添加一个"["和一个"],['finish']来使它成为数组的数组,在最后能够检测到数据的结束,但我还没能弄清楚如何让javascript等到流结束才运行。我假设我需要设置某种极点来检查结束,但是我如何将它附加到回调?

好的,这里有一个博客很好地描述了这个

博客

但是我决定放弃流而使用.to_s。因为你可以管多个动作

object.method.method呈现。在没有复杂性的情况下,您可以获得使用流的所有服务器端好处。如果您有一个缓慢的过程,需要重叠客户端和服务器操作,那么请访问博客并这样做。否则to_s就能很好地覆盖它