rails ajax 执行remote js

简要姿势点

1.Controller::Action 写

respond_to do |format|

format.js

format.html

format.xls

end

Rails会对应去render 

controller_name/action_name.js.erb

controller_name/action_name.html.erb

controller_name/action_name.xls.eku

 

2.在xxx.js.erb  render  yyy.html.erb

$("#captcha_layer").html("<%=escape_javascript(render file: 'home/captcha_pop_up.html.erb')%>");

 

3.jQuery Ajax dataType: 'script'

ref: http://www.w3cschool.cn/ajax_ajax.html

          $.ajax({

             url: '/get_captcha_pop_up',

             data: {form_id : 'user_design_form', is_on_submit : true},

             dataType: 'script',

             type: 'get'

          });

 

贴一下代码

 app/assets/javascripts/main.js

......@@ -1225,6 +1225,13 @@ $(function(){
12251225// alert('请选择分类')
12261226// return false;
12271227// };
 1228+ $.ajax({
 1229+ url: '/get_captcha_pop_up',
 1230+ data: {form_id : 'famous_ask_form'},
 1231+ dataType: 'script',
 1232+ type: 'get'
 1233+ });
 1234+ return false;
12281235})
12291236}($));
12301237});
12311238\ No newline at end of file
...... 
app/assets/stylesheets/home_manage.css
......@@ -18,4 +18,35 @@
1818.colorbox_ul {
1919width: 528px;
2020height: 35px;
21 -}
2221\ No newline at end of file
 22+}
 23+
 24+#layer {
 25+ position: fixed;
 26+ width: 100%;
 27+ height: 100%;
 28+ left: 0;
 29+ top: 0;
 30+ background: #000;
 31+ opacity: 0.5;
 32+ filter: alpha(opacity=50);
 33+ z-index: 10;
 34+}
 35+.introNew_pop{ width:400px; border-radius:6px; background:#fff; position:fixed; height:310px; top:50%; left:50%; margin:-154px 0 0 -140px; z-index:12; display:none; background-image:url(/assets/captcha_layer/bg.png)}
 36+.introNew_pop_con{ margin:0px; float:left; display:inline-block; width:400px; }
 37+
 38+.introNew_pop_con h2{ margin-left:30px; line-height:10px;}
 39+.news_info{ margin-left:40px; margin-top:2px;width:100%; text-align:left; float:left; padding:2px 0; color:#898989; }
 40+.news_info input{border: 1px solid; border-color: #CCC #EEE #EEE #CCC;
 41+color: #000; background: #fff;
 42+width: 304px; height:40px;}
 43+.news_info em{ font-style:normal; padding-right:15px; color:#b2b2b2; }
 44+.news_info em.red{ color:#f47389; }
 45+
 46+.newsInfo_con{ margin-left:40px;padding-bottom:10px; width:100%; }
 47+.newsInfo_scroll{ width:100%; height:310px; overflow:auto; margin:40px 0 0 0; display:inline-block; }
 48+.newsInfo_scroll p{ text-align:left; line-height:20px; padding:10px 0; width:98%; font-size:14px; line-height:22px; color:#6f6f6f; }
 49+.newspop_close{ width:70px; height:60px; display:inline-block; background:#f47389; line-height:60px; color:#fff; font-size:30px; text-align:center; margin:40px 0 0 0; }
 50+.button{ margin-left:40px;padding-bottom:30px; width:100%; }
 51+.goback{ color:#0c90b1; font-size:12px; line-height:35px;}
 52+.closeicon{margin-top:17px; height:22px;width:22px;cursor:pointer; margin-left:362px; }
 53+.textinput{font-size:12px; margin-top:10px; line-height:29px;}
2354\ No newline at end of file
...... 
app/controllers/designs_controller.rb
......@@ -148,6 +148,10 @@ class DesignsController &lt; ApplicationController
148148flash[:design_errors] = []
149149flag = true
150150@design = current_user.designs.build(params[:design])
 151+ unless simple_captcha_valid?
 152+ flash[:design_errors] << "验证码错误"
 153+ flag = false
 154+ end
151155if params[:story_id].present?
152156@design.story_id = params[:story_id]
153157@design.baicheng_active = true
...... 
app/controllers/dialog_celebrity/celebrity_questions_controller.rb
......@@ -15,6 +15,10 @@ class DialogCelebrity::CelebrityQuestionsController &lt; ApplicationController
1515 
1616def create
1717question = CelebrityQuestion.new params[:celebrity_question]
 18+ unless simple_captcha_valid?
 19+ flash[:notice] = "验证码错误"
 20+ redirect_to new_dialog_celebrity_celebrity_question_path and return
 21+ end
1822question.keyword = ""
1923unless question.save
2024flash[:notice] = "描述文字不少于6个字"
...... 
app/controllers/home_controller.rb
......@@ -227,4 +227,12 @@ class HomeController &lt; ApplicationController
227227def get_user_sign_status
228228render :json => { code: current_user.present? ? 1 : 0, content: render_to_string(partial: "layouts/navbar-fixed-top") }
229229end
 230+
 231+ def get_captcha_pop_up
 232+ @form_id = params[:form_id]
 233+ @is_on_submit = params[:is_on_submit]
 234+ respond_to do |format|
 235+ format.js
 236+ end
 237+ end
230238end
231239\ No newline at end of file
...... 
app/views/designs/new.html.erb
......@@ -65,7 +65,17 @@
6565alert(falg)
6666return false
6767}else{
68 - return true
 68+ if ('true'==$('#user_design_form_commit_flag').val() ) {
 69+ return true;
 70+ }else{
 71+ $.ajax({
 72+ url: '/get_captcha_pop_up',
 73+ data: {form_id : 'user_design_form', is_on_submit : true},
 74+ dataType: 'script',
 75+ type: 'get'
 76+ });
 77+ return false
 78+ };
6979}
7080 
7181})
......@@ -110,7 +120,9 @@
110120 
111121<div class="tab-content upload_content">
112122<div class="tab-pane active" id="upload_tab1">
113 - <%= form_for([current_user, @design], html: {:class=>"form-horizontal index_main noborder nopadding nomargin js-commit"}) do |f| %>
 123+ <%= form_for([current_user, @design], html: {:id=>'user_design_form', :class=>"form-horizontal index_main noborder nopadding nomargin js-commit"}) do |f| %>
 124+ <input id="user_design_form_captcha" name="captcha" type="hidden">
 125+ <input id="user_design_form_commit_flag" value="false" type="hidden">
114126<%= hidden_field_tag "story_id", params[:story_id] %>
115127<fieldset class="text-center">
116128<label class="radio inline">
...... 
app/views/dialog_celebrity/celebrity_questions/new.html.erb
......@@ -167,7 +167,8 @@
167167 
168168<div class="tab-content famous_ask_content">
169169<div class="tab-pane active" id="famous_tab1">
170 - <form action="<%=dialog_celebrity_celebrity_questions_path%>" method="post" class="famous_ask_form nomargin pt15 pb25">
 170+ <form id="famous_ask_form" action="<%=dialog_celebrity_celebrity_questions_path%>" method="post" class="famous_ask_form nomargin pt15 pb25">
 171+ <input id="famous_ask_form_captcha" name="captcha" type="hidden">
171172<% if current_user.present? -%>
172173<input type="hidden" name="celebrity_question[user_id]" value="<%= current_user.id %>">
173174<%else -%>
...... 
app/views/home/captcha_pop_up.html.erb
......@@ -0,0 +1,20 @@
 1+<div class="introNew_pop" style="display: block;">
 2+ <div class="introNew_pop_con">
 3+ <div class="closeicon"><a href="#"></a></div>
 4+ <h2></h2>
 5+ <div class="news_info">
 6+ <br />
 7+ <span class="textinput">按下图中的字符填写,不区分大小写。</span>
 8+ </div>
 9+ <div class="newsInfo_con">
 10+ <%= show_simple_captcha %>
 11+ <span id="lab_captcha" class="label label-important hide vadil">请输入验证码</span>
 12+ </div>
 13+ <div class="button">
 14+ <a href="#">
 15+ <span style="margin-left:9px;"><img id="quit_captcha_layer" src="<%= asset_path "captcha_layer/button2.png" %>" /></span>
 16+ <span style="float:left; "><img id="submit_captcha_layer" src="<%= asset_path "captcha_layer/button1.png" %>" /></span>
 17+ </a>
 18+ </div>
 19+ </div>
 20+</div>
021\ No newline at end of file
...... 
app/views/home/get_captcha_pop_up.js.erb
......@@ -0,0 +1,25 @@
 1+ $("#captcha_layer").html("<%=escape_javascript(render file: 'home/captcha_pop_up.html.erb')%>");
 2+ $("#layer").show();
 3+ $("#captcha_layer").show();
 4+
 5+ $(".closeicon").click(function(){
 6+ $("#layer").hide();
 7+ $("#captcha_layer").hide();
 8+ });
 9+ $("#quit_captcha_layer").click(function(){
 10+ $("#layer").hide();
 11+ $("#captcha_layer").hide();
 12+ });
 13+ $("#submit_captcha_layer").click(function(){
 14+ if ($('#captcha').val() == "") {
 15+ $("#lab_captcha").addClass('label-important').show().text('请输入验证码');
 16+ } else {
 17+ $("#layer").hide();
 18+ $("#captcha_layer").hide();
 19+ $('#<%= @form_id %>_captcha').val( $('#captcha').val() );
 20+ <% if @is_on_submit %>
 21+ $('#<%= @form_id %>_commit_flag').val( 'true' );
 22+ <% end %>
 23+ $('#<%= @form_id %>').submit();
 24+ }
 25+ });
026\ No newline at end of file
...... 
app/views/layouts/home_manage.html.erb
......@@ -38,6 +38,8 @@
3838<%= yield :body_head %>
3939<!-- <%#= render "layouts/navbar-fixed-top" %> -->
4040 
 41+ <div id="layer" style="display: none;"></div>
 42+ <div id="captcha_layer" style="display: none;"></div>
4143<div class="navbar nomargin" id="navbar-warp">
4244<div class="container">
4345<div style="display:none">
......@@ -356,7 +358,6 @@
356358 
357359<%#= render "layouts/login" %>
358360<script type="text/javascript">
359 -
360361jQuery(function($){
361362var form = $('form.float_login')
362363form.hover(function(){
...... 
config/routes.rb
......@@ -77,6 +77,7 @@ Icolor::Application.routes.draw do
7777get "home/home_overall" => "home#home_overall"
7878get "home/image_show_loading" => "home#image_show_loading"
7979get "/get_user_sign_status" => "home#get_user_sign_status"
 80+ get "/get_captcha_pop_up" => "home#get_captcha_pop_up"
8081 
8182root :to => 'home#index'
8283get "home/design_show"
...... 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值