1

だから、私は購読フォームを作っています。

Jクエリ

    $("<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()
            {

ルビーコード

 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 を含む Web ページの div を更新できません。これをすべて非同期で実行したいので、ページ全体の更新はまったくありません。(そうでなければそれが不可能な場合は認めますが、それは非常に疑わしいです)。div を別のページに配置して JQuery .load() 関数を使用しようとしましたが、.erb ファイルを認識できません。アイデアがなく、ほとんど正気ではありません。ありがとう!

4

1 に答える 1

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 を変更できます。

于 2013-06-15T04:13:55.257 に答える