Я пытаюсь получить содержимое тега ab, а затем использовать его для запроса вспомогательного метода в моих рельсах. Но я не могу понять, как это сделать. Может ли кто-нибудь помочь?
"query" - вспомогательный метод. И мне нужно передать текст, который содержится в теге b. Помогите..?
<div class="col span_1_of_7">
<section id="feed">
<div id ="infoFeed">
<ul style="font: 10px sans-serif;text-align: justify;">
<script>
$(document).click(function(){
<% query($("#tooltip b").text();) %>
});
</script>
<% Story.all.each do |story| %>
<li style="border-style:solid;border-top:thick double #000;">
<p><h4 style="text-align:left;"><%= link_to story.title, story.url, :target => "_blank" %></h4>
<%= story.description %> <h7><br /><br /><%= story.source %><br /><%= story.date.to_date %></h7></p></li>
<% end %>
</ul>
</div>
</section>
<script> $(function() { $('#infoFeed').vTicker();});</script>
</div>
То, что вы делаете, может быть захватывающим, но это невозможно в веб-приложении Client-Server.
Вам нужно понять основы веб-приложения и понять строку, которая разделяет код боковой стороны сервера и код на стороне клиента.
Ruby (Rails) - это серверная сторона: это означает, что он генерирует ваш HTML или JS или CSS, и этот HTML/JS/CSS отправляется клиенту (браузеру). В нашем браузере HTML анализируется и рисуется на вашем экране, а затем выполняется код JavaScript, и он делает все, что вы хотите, используя отправленный HTML. Этот JavaScript не может напрямую обращаться к коду Ruby на вашем сервере.
Хорошо. Посмотрим, что вы сделали.
$(document).click(function(){
<% query($("#tooltip b").text();) %>
});
ОК. Вы добавили скрипт ERB внутри вашего обработчика кликов для своего document
(зачем вы это делаете?). Хорошо, я не буду говорить с вами о ваших ошибках JavaScript. Давайте рассмотрим проблему сервера - клиента здесь.
Это то, что вы ожидаете:
После загрузки веб-страницы текст внутри #tooltip b
извлекается с помощью text
функции jQuery, и он будет передан в query
ruby helper, и он что-то делает.
Что действительно происходит
Когда эта страница генерируется Rails (помните, что это происходит на вашем сервере, и она НЕ ВЫПОЛНИТ ВАШ JAVASCRIPT. Все, что она видит, это обычный текст со встроенным Ruby с использованием <% %>
), вызывающий запрос вызывает, и его аргумент будет таким $("#tooltip b").text();
, Я сказал вам, что этот JavaScript не будет выполняться на сервере. Таким образом, это передается в запрос, и рубин не знает, что такое $("#tooltip b").text();
является. Поскольку его даже не строка (см., Что у вас нет кавычек вокруг нее), Ruby, вероятно, выдает синтаксическую ошибку.
Итак, нижняя строка! Вы хотите, чтобы JQuery взял содержимое #tooltip b
и передал его функции Ruby. Этого не произойдет, потому что этот JavaScript сам генерируется Ruby, и только после того, как этот HTML-ответ будет создан и отправлен в клиентский браузер (где нет времени выполнения Ruby), JavaScript будет выполнен.
Надеюсь, вы понимаете. Прочтите следующее: https://softwareengineering.stackexchange.com/questions/171203/what-are-the-difference-between-server-side-and-client-side-programming
Хорошо. Итак, как вы это достигаете. Запомнить? Я сказал, что вы не можете напрямую обращаться к Ruby-коду. Означает ли это, что вы можете сделать это косвенно каким-то образом? Да! Как вы сказали в комментарии, используйте Ajax.
Вам нужно написать действие, которое поможет вам вызвать метод query
. Затем вам нужно сделать вызов AJAX для URL-адреса, соответствующего действию, которое вы только что написали, и передать результат $("#tooltip b").text();
как данные. В вашем действии получить эти данные из хэша params и передать его вашему помощнику и выполнить вашу обработку. Возвратите результат как js или json согласно вашему желанию.
ok Шаги:
params
. Я думаю, вы знаете, как это сделать. И передайте его в метод вспомогательного запроса. (Для этого вам необходимо включить ваш вспомогательный модуль в контроллер) используйте respond_to
или просто render
чтобы вернуть результат как json
или js
зависимости от вашей ситуации.
На стороне клиента добавьте ajax-вызов к URL-адресу действия и передайте данные. Добавьте обратный вызов успеха, и он получит все, что вы отправили из своего действия. Используйте его, чтобы делать все, что хотите.
Пожалуйста, обратитесь к ресурсам в Интернете. Это не место для написания учебников.