通过ajax

时间:2017-03-24 03:18:46

标签: elixir phoenix-framework

我想在凤凰城做这样的事情

function checkFile() {
            $.ajax({
                    type: 'POST',
                    url: '/check.ex',
                    data: {'filename':'file.png'},
                    error : function(){
                            setTimeout(function(){ checkFile(); }, 3000);
                    },
                    success : function(data) {
                            // display the image
                    }
            });
    }

检查是否创建了文件,然后通过js显示图像。但当然/路由到主页,我不太确定设置路由的最佳方式或放置独立的.ex或.exs文件的位置。我想知道是否有一种标准的解决方法。可能是phoenixframework.org上的文章或其他东西我很想念。提前致谢

1 个答案:

答案 0 :(得分:1)

您无法直接访问.ex文件,您要做的是创建API资源。

看起来可能如下所示。

添加到router.ex

resources "/images/:filename", ImageController, only: [:show]

创建新的image_controller.ex

defmodule YourApp.ImageController do
  use YourApp.Web, :controller

  def show(conn, %{"filename" => filename}) do
    image_path   = Path.join("path/to/image", filename)
    image_exists = File.regular?(image_path)

    if image_exists do
      render(conn, "show.json", image: filename)
    else
      conn
      |> put_status(:not_found)
      |> render("404.json", image: filename)
    end
  end
end

创建image_view.ex

defmodule YourApp.ImageView do
  use YourApp.Web, :view

  def render("show.json", %{image: filename}) do
    %{data: %{image: filename}}
  end

  def render("404.json", %{image: filename}) do
    %{status: 404, message: "#{filename} doesn't exist."}
  end
end

现在您应该可以更改您的javascript:

function checkFile() {
  $.ajax({
    type: 'GET',
    url: '/images/file.png',
    error : function(){
      setTimeout(function(){ checkFile(); }, 3000);
    },
    success : function(data) {
      // display the image
    }
  });
}