等待数据加载到数据库然后显示它

时间:2014-08-20 20:39:47

标签: javascript jquery ruby-on-rails

我的情况是,当点击链接时,会创建一个图像并将其数据保存到数据库中。单击该链接时,它也将加载模式。我希望模态出现然后在它准备好时加载图像。该图像是使用cloudinary和url2png插件的组合创建的。保存一些其他记录特定数据后,在after_commit后创建图像:

after_commit :async_set_image, on: :create

  private


  def async_set_image
    url2png = Cloudinary::Uploader.explicit("#{root_url}/snapshot/#{id}/url2png/viewport=2200x680|say_cheese=true", type: 'url2png')
    update_attributes(image: url2png)
  end
  handle_asynchronously :async_set_image

这是我的帖子

snapshotModal: ->
    $.post "/api/snapshot", (data) ->
      $("#temp-my-designs-container").show() ->
        # DO SOME PROMISE STUFF HERE?
      return

所以有些数据会保存在数据库中,当async_set_image方法最终返回数据时,它会被加载到数据库中。如何在加载数据后获取数据?

1 个答案:

答案 0 :(得分:0)

<强>同步性

您可能希望查看asynchronicity和同步性之间的区别 - 异步意味着它超出了典型应用程序流程的范围:

  

在计算机科学中,异步I / O或非阻塞I / O是一种形式   允许其他处理继续的输入/输出处理   在传输完成之前。

这意味着,在一个简单的层面上,无论何时发送“异步”请求,它都将在后台运行 - 独立于任何其他进程。这是需要处理的方式 - 如果您想依赖其处理,您将使用同步请求


<强>实施

您要查看的是您如何调用请求,以及如何返回您想要的数据

您的Rails流程将如下所示:

request > router > controller > model > controller > DOM

这意味着您的请求不会取决于您的模型,因为它取决于您的控制器。由于Rails是一个MVC (Model View Controller)框架,因此您需要尽可能多地依赖控制器来接收模型以接收请求。

为此,您最好向特定的controller#action发送ajax请求,然后您可以在DOM中使用

-

#app/assets/javascripts/your_javascript.js.coffee
$.ajax
 url: "/api/snapshot"
 data: data
 success: (data) ->
   # this is where your returned data will come

我对您的控制器发出ajax (Asynchronous Javascript And XML)请求,然后我会将数据传递给您的模型?在那之后,您将更好地摆脱延迟的作业异步性,允许您的前端Ajax处理及时响应:

#app/controllers/snapshots_controller.rb
Class SnapshotsController < ApplicationController
   def show
      #perform stuff here
   end
end
相关问题