Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将(Sinatra)Ruby值传递给Javascript_Javascript_Jquery_Ruby_Sinatra - Fatal编程技术网

将(Sinatra)Ruby值传递给Javascript

将(Sinatra)Ruby值传递给Javascript,javascript,jquery,ruby,sinatra,Javascript,Jquery,Ruby,Sinatra,所以,我在做一份订阅表 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/&g

所以,我在做一份订阅表

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代码

 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注入(根据我的天知道有多少小时的研究),并且我无法更新网页上包含该变量async的div。我想做这一切异步,所以没有刷新整个页面。(如果不可能,我会让步,但我对此表示高度怀疑)。我试图将div放在另一个页面上,并使用JQuery.load()函数,但无法识别.erb文件。 没有想法,几乎失去理智。 谢谢

JavaScript:

$.post('/user/subscribe',$('form').serialize(),函数(数据){
//您可以根据服务器的响应执行任何操作
//数据是一个JavaScript对象。
}“json”);
Ruby/Sinatra:

需要“json”#只是为了方便序列化
发布“/user/subscribe”do
#根据需要处理参数
内容类型为“应用程序/json”
{:ok=>@is_ok}.to_json
结束
如果没有JSON库,您可以使用一些有效的JSON标记来结束您的方法,如:

%Q[ { "ok":#{@is_ok} } ]

JavaScript/AJAX将发布到服务器,匹配的Sinatra路由将处理请求,并且该方法的字符串结果(not通过
put
)将作为对该方法的响应发送。jQueryAjax处理程序将接收它,将其解析为JSON并调用回调函数,将它创建的JavaScript对象作为参数传递。然后,您可以根据需要在客户端修改HTML DOM。

您知道,电子邮件验证并没有告诉您最重要的事情,即地址实际上会将邮件发送给某人。与其浪费代码检查以查看提交的字符串是否与规范的部分实现匹配,不如发送一封电子邮件,询问用户是否希望创建帐户。当用户点击您的验证链接时,帐户将被验证。对不起,还有一个问题。我实现了你的代码,并做了一个console.log(data);这表明ok:清楚地显示了正确的值。我只是不知道如何访问它。我尝试了几种不同的json解析方法,data(),data{},data[]和简单地说:好的,但都不起作用。再次感谢!非常感谢!你完全拯救了我的理智。
%Q[ { "ok":#{@is_ok} } ]