这已被问过几次,然而,网上似乎没有好的答案。为了避免回复或链接不回答这个问题,我将重新措辞。页面只有一个带有输入文本(和按钮)的表单。我们将文本发布到服务器,并希望它只是发回并提醒。换句话说,视图应该有一行:
$.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
以获取发布文字的提醒?
答案 0 :(得分:2)
是的,这可以通过Sinatra完成。任何路由都可以将数据从服务器返回给客户端;默认情况下,这是使用text/html
mime类型发送的,但您也可以使用适当的mime类型返回纯文本:
post "/reply.php" do
content_type :text
params['t']
end
如果您想要回送的不仅仅是一个值,您可以使用this question中的代码查看所有请求值。
这将从服务器返回变量的值,而您在问题中的客户端JavaScript代码将导致显示alert()。