繁体   English   中英

Rails 4中的Link_to和Ajax请求

[英]Link_to and ajax request in Rails 4

我有以下几点:

<%= link_to "Some_link", some_path, class: "btn btn-success btn-xs", id: "contact", "data-sid" => item.id %>

在我的application.js中,我有:

$('#contact').click(function (e) {
    e.preventDefault();

    var item_id = $(this).data('sid');

    $.ajax({
      type: 'GET',
      url: '/somepath'+ item_id,
      success: function(data) {
       $("#edit-project-modal").find("input[name='id']").val(data.id);
       $("#edit-project-modal").find("input[name='name']").val(data.name);

     },

      error: function() {
       window.alert('Error Loading Item!!');
      }
   });
});

路径“ some_path”将具有供用户填写的表格。 也就是说,我真正想要实现的是当用户单击链接“ Some_link”时,该链接可以将用户重定向到“ some_path”,但是在此之前,我要执行ajax请求以将数据加载到表单中。 我不知道在这种情况下是否可以使用:remote =>“ true”。 现在发生的是,当我单击链接时,ajax起作用了,但并没有将我发送到该页面。

我究竟做错了什么? 有什么建议么。 先感谢您。

假设您要:

  1. 单击“某些链接”(通过AJAX)
  2. 然后,“联系表格”正出现在“某些链接”下方

您可以使用以下内容:

<%= link_to "Some_link", some_path, class: "btn btn-success btn-xs", id: "contact", "data-sid" => item.id %>
<section id='contact-form'></section>

$('#contact').click(function (e) {
  e.preventDefault();

  var item_id = $(this).data('sid');

  $('#contact-form').load('/somepath'+ item_id, function(response, status, xhr){
    if (status === "error") {
      window.alert('Error Loading Form!!');
    }
    else {
      window.alert('Success Loading Form!!');
    }
  })
);

好吧,现在我对您的要求有了更好的了解,我觉得我更有能力为您服务。 您的工作非常复杂,解决此问题的方法将行不通。

$('#contact').click(function (e)在捕获点击事件然后尝试执行AJAX查询时的状态-我假设您正在从控制器发回数据并且不执行任何操作接收数据,然后尝试填充表单字段,但是这些表单字段当然不存在……您还没有导航到该页面-此时您的jquery很可能会静默失败。

现在,由于吞下了事件并阻止了默认行为,因此不会遵循链接的原始路径。 即使您允许事件传播,它也将无法如前一段中突出显示。

好吧,在不知道您的进一步要求的情况下,对我来说似乎您需要做的就是

  1. 删除所有的jQuery。
  2. 允许link_to像普通HTTP GET一样执行您的操作。

    <%= link_to edit_item_path(item), class: "btn btn-success btn-xs", id: "contact" %>

    **假设您有一个带编辑操作的ItemController,并且路由设置为

    edit_item GET /items/:id/edit(.:format) items#edit

  3. 将数据设置为控制器中的实例变量

    @item = Item.find(params[:id])

  4. 使用实例变量将表单呈现为html.erb-

例如,

<%= form_for @item, url: item_path do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>
  <input type='submit'/>
<% end %>

只需直接导航到表单即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM