在Rails应用程序中使用jQuery进行Ajax调用
我已经有了一个带有普通HTTP post的表单。现在,我想用jqueryajax请求重写这个表单。以下是我所拥有的: register\u user.html.erb在Rails应用程序中使用jQuery进行Ajax调用,jquery,ruby-on-rails,ajax,Jquery,Ruby On Rails,Ajax,我已经有了一个带有普通HTTP post的表单。现在,我想用jqueryajax请求重写这个表单。以下是我所拥有的: register\u user.html.erb <%= form_tag :action=> "register_user" %> <label for="user_id_1">user_id_1:</label><br/>
<%= form_tag :action=> "register_user" %>
<label for="user_id_1">user_id_1:</label><br/>
<%= text_field "user", "user_id_1", :size => 20 %>
<label for="user_id_2">user_id_2:</label><br/>
<%= text_field "user", "user_id_2", :size => 20 %>
<%= submit_tag "Submit" %>
def register_user
#do something
end
所以,我试图遵循教程,但无法在我的应用程序中遵循相同的说明。有什么建议吗?如何使用上述表单进行jqueryajax调用
好的,application.js(register\u user.html.rb头部包含的文件)将
jQuery.ajaxSetup({
'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})
jQuery.fn.submitWithAjax = function() {
this.submit(function() {
$.post(this.action, $(this).serialize(), null, "script");
return false;
})
return this;
};
$(document).ready(function() {
$("#new_review").submitWithAjax(); #WHAT SHOULD REPLACE #new_review?
})
但是,如何将提交操作与表单关联?我对JS、jQuery和Rails都是新手
更新1
轨道2.3.8
更新2
<%= form_tag :action=> "register_user" , :html => {:id => "register_user" }%>
谢谢你们的帮助 给表单一个ID,如下所示:
<%= form_tag :action=> "register_user", :html => {:id => "form_name" } %>
jQuery(document).ready(function() {
jQuery('#myform').bind('ajax:complete', '', function(request) {
alert("I got: " + request.responseText);
});
});
[更新:视图]
您应该添加一个名为register\u user.js.erb
的文件,该文件应该包含呈现所需内容所需的javascript。
因此,将执行此javascript并更改页面。在javascript中,您使用现在拥有的视图
所以你应该这样:
!= "$('#placeholder').replaceWith('#{escape_javascript(render :partial => 'render_user')}')"
为了实现这一点,您应该有一些html元素,比如带有
id=placeholder
的DIV(当然,为您选择一个合适的名称) 您在rails 3上吗?Rails3支持不引人注目的javascript(UJS)。查看文件public/javascripts/rails.js
它是如何工作的
要创建远程表单,请执行以下操作:
<%= form_tag :action=> "register_user", :remote => true %>
您还可以钩住其他事件,如ajax:failure等
编辑
对于Rails 2.3.8(确保已包含Rails默认js文件)
注意如果只想使用jquery并删除默认包含的原型库,可以使用jRails(用jquery替换原型):
我不知道您的@final_值是多少,所以我做了一个通用示例:
在你看来:
<h2 id="myoutput">
<% if @final_value != nil %>
<%= @final_value.to_s %>
<% end %>
</h2>
<% form_remote_tag :url => { :action=> "register_user" } do %>
<label for="user_id_1">user_id_1:</label><br/>
<%= text_field "user", "user_id_1", :size => 20 %>
<label for="user_id_2">user_id_2:</label><br/>
<%= text_field "user", "user_id_2", :size => 20 %>
<%= submit_tag "Submit" %>
<% end %>
我需要将register_user.html.erb重命名为register_user.js.erb吗?我已经为Rails 2.3.8添加了一个示例
<%= form_tag :action=> "register_user", :remote => true, :html => { :id => 'myform' } %>
jQuery(document).ready(function() {
jQuery('#myform').bind('ajax:complete', '', function(request) {
alert("I got: " + request.responseText);
});
});
<h2 id="myoutput">
<% if @final_value != nil %>
<%= @final_value.to_s %>
<% end %>
</h2>
<% form_remote_tag :url => { :action=> "register_user" } do %>
<label for="user_id_1">user_id_1:</label><br/>
<%= text_field "user", "user_id_1", :size => 20 %>
<label for="user_id_2">user_id_2:</label><br/>
<%= text_field "user", "user_id_2", :size => 20 %>
<%= submit_tag "Submit" %>
<% end %>
def register_user
form_data = params['user']
if form_data.is_a?(Hash)
@final_value = form_data['user_id_1']
end
respond_to do |format|
format.html
format.js do
render :update do |page|
page.replace_html 'myoutput', @final_value
page.visual_effect :highlight, 'myoutput'
end
end
end