簡體   English   中英

將(Sinatra)Ruby值傳遞給Javascript

[英]Passing a (Sinatra) Ruby value to Javascript

所以,我正在訂閱表格。

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

 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文件無法識別。 出於想法,幾乎出於理智。 謝謝!

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,即客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM