Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.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
在Rails应用程序中使用jQuery进行Ajax调用_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

在Rails应用程序中使用jQuery进行Ajax调用

在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/>

我已经有了一个带有普通HTTP post的表单。现在,我想用jqueryajax请求重写这个表单。以下是我所拥有的:

register\u user.html.erb

<%= 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