所以,我正在订阅表格。
Jquery的
$("<div id='dialog' title='Subscribe!'> <form id='subscribe_form' method='POST' action='/user/subscribe'>" +
"<input type='text' name='subscribe_email' id='email' placeholder='Email Address'> <br/>" +
"<button id='submit_subscribe_form'>Submit</button></p><p id='ruby_bool'></p></form>" +
"</div>").appendTo($("#subscribe"));
提交此表单时,它会向Ruby Sinatra监听器发送ajax调用(对不起,如果我没有使用正确的术语,还没有真正教过Sinatra,只是展示了如何使用它)
$('form').submit(function(){
$.ajax({
type: "POST",
url: "/user/subscribe",
data: $('form').serialize(),
success: function()
{
Ruby Code
post "/user/subscribe" do
user_Information = EmailList.new
if params[:subscribe_email] =~ /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/
user_Information.email = params[:subscribe_email]
puts user_Information.save
@email_validation_result = "True"
else
@email_validation_result = "False"
end
puts @email_validation_result
(是的,我知道我不应该使用正则表达式,但我能找到的引擎是用于PHP) 我想使用@email验证结果,这样我就可以知道我的成功:在我的ajax中调用。问题是,JavaScript不允许Ruby注入(根据我的上帝知道多少小时的研究)并且我无法在包含该变量异步的网页上更新div。我希望所有这些都是异步的,所以整个页面都没有任何刷新。 (如果不可能,否则我会承认,但我非常怀疑)。我试图将div放在另一个页面上并使用JQuery .load()函数,但.erb文件无法识别。 出于想法,几乎出于理智。 谢谢!
答案 0 :(得分:3)
JavaScript的:
$.post( '/user/subscribe', $('form').serialize(), function(data){
// Do whatever you want with the response from the server here
// data is a JavaScript object.
}, 'json');
红宝石/屈:
require 'json' # just for a convenient way to serialize
post '/user/subscribe' do
# process the params however you want
content_type 'application/json'
{ :ok => @is_ok }.to_json
end
如果没有JSON库,您可以使用一些有效的JSON标记来结束您的方法,例如:
%Q[ { "ok":#{@is_ok} } ]
JavaScript / AJAX将发布到服务器,匹配的Sinatra路由将处理请求,并且该方法的字符串结果(不通过puts
完成)将作为对方法的回应。 jQuery AJAX处理程序将接收它,将其解析为JSON并调用您的回调函数,并将其创建的JavaScript对象作为参数传递。然后,您可以根据需要修改HTML DOM,客户端。