AJAX可以和Sinatra一起使用吗?

时间:2014-09-21 17:37:05

标签: jquery ruby ajax sinatra

这已被问过几次,然而,网上似乎没有好的答案。为了避免回复或链接不回答这个问题,我将重新措辞。页面只有一个带有输入文本(和按钮)的表单。我们将文本发布到服务器,并希望它只是发回并提醒。换句话说,视图应该有一行:

$.post(...,$("form").serialize(),function(reply){alert(reply);}); 

使用PhP,答案是“回声”单行。这可以在Sinatra中完成 - 我知道后端框架是围绕自己处理DOM操作而构建的。我问这个问题,因为使用更具表现力的语言(例如Ruby)也只是用于数据库接口/后端逻辑会很好。

修改:这是/views/index.erb(使用“/ reply”代替“reply.php” - 否则为index.html / index.php)部分:

<script src="jquery"></script>

<form action="reply.php" method="post"><input type="text" name="t"></form> 

<script>
$(document).ready(function(){
   $("form").submit(function(event){
      event.preventDefault();
      $.post("reply.php",$("form").serialize(),function(reply){alert(reply);});
   });
});
</script>

请注意,对于event.preventDefault(),我们会停留在/路线,而不会进入/reply.php, 这将删除表单并仅打印提交的文本。换句话说,就是这样 是什么启用了Ajax,我们从服务器reply.php得到了回复(仅在警报中):

echo $_POST["t"];

使用Sinatra,我们需要一个routes.rb控制器:

require 'sinatra'

get '/' do
  erb :index
end

post '/reply' do
  ...
end

问题:使用index.html/reply.php,我们会收到包含已发布文字的提醒。如何修改index.erb / routes.rb以获取发布文字的提醒?

1 个答案:

答案 0 :(得分:2)

是的,这可以通过Sinatra完成。任何路由都可以将数据从服务器返回给客户端;默认情况下,这是使用text/html mime类型发送的,但您也可以使用适当的mime类型返回纯文本:

post "/reply.php" do
  content_type :text
  params['t']
end

如果您想要回送的不仅仅是一个值,您可以使用this question中的代码查看所有请求值。

这将从服务器返回变量的值,而您在问题中的客户端JavaScript代码将导致显示alert()。