Rails - Ajax-запрос не загружается при добавлении файла .js.erb - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь сделать простой сайт, если хотите, трекер акций.Одной из функций является получение результатов с помощью ajax, поскольку, чтобы не загружать всю страницу, я могу зайти так далеко, чтобы получить html с данными, которые я хочу, в ответ, но не могу загрузить его на страницу.И когда я добавляю эквивалентный файл js.erb, я вообще не получаю ответ.

Вот эта страница: (my_portfolio.html.erb)

    <h1> My Portfolio</h1>

<h3>Search for stocks</h3>
  <div id="stock-lookup">
    <%= form_tag search_stocks_path, remote: true, method: :get, id: "stock-lookup-form" do %>
    <div class="form-group row no-padding center col-md-12">
      <div class="col-md-10">
        <%= text_field_tag :stock, params[:stock], placeholder: "Stock ticker symbol", autofocus: true,
                           class: "form-control search-box input-lg" %>
      </div>
      <div class="col-md-2">
        <%= button_tag :submit, class: "btn btn-lg btn-success" do %>
          <%= fa_icon "search" %> Look up a stock

        <% end %>
      </div>


    </div>
    <% end %>

  </div>
  <div id="results">
    <%= render 'users/result' %>
  </div>

вот часть, которая отображаетсявнизу: (_result.html.erb)

<% if @stock %>
  <div class="well results-block">
    <strong>Symbol: </strong><%= @stock.ticker %>
    <strong>Name: </strong><%=@stock.name %>
    <strong>Price: </strong><%= @stock.last_price %>
  </div>
<% end %>

вот метод, который запускается при отправке формы (stocks_controller.rb):

class StocksController < ApplicationController
  def search

    if params[:stock].present?
      @stock = Stock.new_from_lookup(params[:stock])
      if @stock
        respond_to do |format|
          format.js { render partial: 'users/result' }
        end
      else
        flash[:danger] = "You have entered an invalid symbol."
        redirect_to my_portfolio_path
      end

    else
      flash[:danger] = "You have input an unexistant stock."
      redirect_to my_portfolio_path
    end

  end
end

вот моя проблема: когдаЯ отправляю правильные данные, проверяю ответ сервера в браузере и вижу текст ответа:

  <div class="well results-block">
    <strong>Symbol: </strong>GOOG
    <strong>Name: </strong>Alphabet Inc.
    <strong>Price: </strong>1042.1
  </div>

Так что это означает, что я получаю данные обратно, однако пытаюсь поместить их встраница не работает, потому что когда я создаю соответствующий _result.js.erb, запрос вообще ничего не возвращает и страница не заполнена данными, запрос возвращает только 200, когда нет файла js.erb.Вот код: (_result.js.erb)

$('#results').html("<%= j (render 'users/result') %>")

Я понятия не имею, что ошибка может быть.Кто-нибудь может пролить свет на это?

Редактировать: Утвержденный ответ работает, да, но я обнаружил, что вы также можете передать визуализацию для изменения содержимого страницы, и что $('#results').html("<%= j (render 'users/result') %>") на самом деле пытается визуализировать страницу,в то время как реальное намерение состоит в том, чтобы просто получить html, для этого просто используйте вместо него $('#results').html("<%= j (render partial:'users/result.html.erb') %>").Тем не менее, часть html.erb кажется строго необходимой, в отличие от других частей рельсов.Было бы замечательно, если бы кто-то мог указать, почему.

1 Ответ

0 голосов
/ 15 декабря 2018

Похоже, вы близки, и проблема заключается в том, что сервер сопоставлен с клиентом.Ваш пример javascript

$('#results').html("<%= j (render 'users/result') %>")

будет отображаться на сервере только 1 раз, поэтому он не окажет влияния на клиента, когда вы получите ответ от вызова ajax.

Чтобы это работало, он должен быть частью вызова ajax или fetch и должен выглядеть примерно так.

html_results_string = "YOUR RAW HTML RESPONSE"
$('#results').html(html_results_string)

Примечание, я также рекомендую указывать здесь против идентификатора.Используйте что-то вроде селектора данных на основе идентификатора запрашиваемой вами вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...