Передача аргумента помощнику рельсов с Jquery

0

Я пытаюсь получить содержимое тега 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>
Теги:

1 ответ

2
Лучший ответ

То, что вы делаете, может быть захватывающим, но это невозможно в веб-приложении 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 Шаги:

  1. Создайте действие в Rails и добавьте маршрут для доступа к этому действию.
  2. Внутри действия получаются данные, отправляемые с клиентской стороны из хэша params. Я думаю, вы знаете, как это сделать. И передайте его в метод вспомогательного запроса. (Для этого вам необходимо включить ваш вспомогательный модуль в контроллер)
  3. используйте respond_to или просто render чтобы вернуть результат как json или js зависимости от вашей ситуации.

  4. На стороне клиента добавьте ajax-вызов к URL-адресу действия и передайте данные. Добавьте обратный вызов успеха, и он получит все, что вы отправили из своего действия. Используйте его, чтобы делать все, что хотите.

Пожалуйста, обратитесь к ресурсам в Интернете. Это не место для написания учебников.

  • 0
    Спасибо за ответ, кстати .... Могу ли я использовать ajax, чтобы сделать это тогда?
  • 0
    Да, конечно.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню