#ruby-on-rails #ajax
#ruby-on-rails #ajax
Вопрос:
Итак, у меня есть серьезные сомнения на некоторое время. Я вижу, что многие люди используют ajax для выполнения запросов к серверу, когда требуется обновление во внешнем интерфейсе. Но в чем реальная разница между использованием ajax или, например, использованием link_to. Например, у меня есть этот ajax-код, который отправляет запрос серверу на лайк публикации:
$(function(){
$(".pos-like").on("click", function(){
var post_id = $(this).data("id")
$.ajax({
url: "/post/like/" post_id,
method: "POST"
}).done(function(response){
console.log(response)
})
})
});
Но в другом случае это также работает, если я использую link_to в представлении для того же запроса.
<%= link_to like_path(post_id: post.id) do %>
<i class="fa fa-heart fa-2x post-like"></i>
<% end %>
Затем в контроллере я просто отображаю часть, которая просто меняет цвет кнопки «Мне нравится» (используя jquery).
Мой вопрос в том, почему люди обычно используют Ajax для создания обновлений, когда они могут просто использовать, например, link_to в представлении. Есть ли какие-либо преимущества при использовании ajax?
Спасибо!!
Комментарии:
1. В вашем
link_to
примере вы не используетеremote: true
опцию, и, следовательно, ваш запрос к серверу являетсяHTML
запросом, а неJS
запросом. Таким образом, вы повторно отображаете всю страницу. Иногда вы можете не захотеть повторно отображать всю страницу и, следовательно, использоватьajax
вызов. Кстати, использованиеremote: true
также являетсяajax
, даже если вы не обязательно пишете код javascript, как в вашем первом примере. Кроме того, кстати, не существует «правильного способа» — это зависит от ваших потребностей. Оба описанных вами подхода полностью верны.2. @jvillian Да, я забыл об удаленном true. Таким образом, оба подхода верны. Большое спасибо!!
Ответ №1:
Удаленные элементы в представлениях Rails — это то, что на самом деле выполняет вызовы Ajax за кулисами. Итак, разница здесь в том, что:
- В первом примере вы явно вызываете все, что хотите, чтобы вызывалось при нажатии на что-либо
- Во втором примере вы используете помощников Rails Ajax для достижения той же цели, которая фактически вызовет блок JS, который очень похож на первый пример