Link_to 和 ajax 请求 Rails 4
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" 将有一个表单供用户填写。话虽如此,我真正想要实现的是当用户单击 link "Some_link" 时,link 可以将用户重定向到 "some_path" 但在此之前我想执行 ajax 请求将数据加载到表单中。我不知道在这种情况下我是否可以使用 :remote=>"true" 。现在发生的情况是,当我单击 link 时,ajax 有效,但它没有将我发送到该页面。
我做错了什么?有什么建议么。
先感谢您。
假设您想要:
- 单击 "Some Link"(通过 AJAX)
- 然后,联系表会出现在 "Some Link"
下方
您可以使用以下内容:
<%= 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 正在无声地失败。
现在因为您吞下了事件并阻止了默认行为,所以您的 link 的原始路径没有被遵循。即使您允许事件传播,它也不会像上一段中突出显示的那样工作。
好的,不知道你的进一步要求是什么,在我看来你需要做的就是
- 删除所有 jquery。
允许 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
将您的数据设置为控制器中的实例变量
@item = Item.find(params[:id])
使用实例变量将表单呈现为 html.erb -
例如,
<%= form_for @item, url: item_path do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<input type='submit'/>
<% end %>
只是一个简单的表单导航。
我有以下内容:
<%= 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" 将有一个表单供用户填写。话虽如此,我真正想要实现的是当用户单击 link "Some_link" 时,link 可以将用户重定向到 "some_path" 但在此之前我想执行 ajax 请求将数据加载到表单中。我不知道在这种情况下我是否可以使用 :remote=>"true" 。现在发生的情况是,当我单击 link 时,ajax 有效,但它没有将我发送到该页面。
我做错了什么?有什么建议么。 先感谢您。
假设您想要:
- 单击 "Some Link"(通过 AJAX)
- 然后,联系表会出现在 "Some Link" 下方
您可以使用以下内容:
<%= 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 正在无声地失败。
现在因为您吞下了事件并阻止了默认行为,所以您的 link 的原始路径没有被遵循。即使您允许事件传播,它也不会像上一段中突出显示的那样工作。
好的,不知道你的进一步要求是什么,在我看来你需要做的就是
- 删除所有 jquery。
允许 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
将您的数据设置为控制器中的实例变量
@item = Item.find(params[:id])
使用实例变量将表单呈现为 html.erb -
例如,
<%= form_for @item, url: item_path do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<input type='submit'/>
<% end %>
只是一个简单的表单导航。