HTTP-запрос на событие keyup в приложении Rails - PullRequest
0 голосов
/ 03 марта 2019

У меня есть вход, где я слушаю:

const shopFilterProductsInput = document.getElementById("shopFilterProducts");

Я бью бэкэнд в каждом бейпе (это в файле веб-пакета)

const filterOffers = (e) => {
  let inputValue = shopFilterProductsInput.value;

  const url = `/shops/${shopId}?query=${inputValue}`;


  fetch(url, {
   method: "GET",
   headers: {
    'X-Requested-With': 'XMLHttpRequest',
    "Content-Type": "application/javascript",
    'Accept': 'application/javascript',
    "X-CSRF-Token": csrfToken,
    "authenticity_token": csrfToken
   }
  })
  .then(function() {
    console.log("response back fetch api")
  })
}

if (shopFilterProductsInput) {
  shopFilterProductsInput.addEventListener("keyup", filterOffers)
}

В бэкэндеЯ указываю ответ, который я хочу для формата js

 def show
    set_shop
    set_user
    set_category
    # @shop.nil? != true ### ?????
    @shop = Shop.find(params[:id])
    query = params[:query]
    if query
      @offers = @shop.offers.search_by_model_and_brand_generic_product_name(query)
      binding.pry
      respond_to do |format|
        format.html { render 'shops/show' }
        format.js
      end
    else
      @offers = @shop.offers
    end
  end

, и у меня есть соответствующий show.js.erb файл

console.log("filtering pg show.js.erb");
const shopOffersPartial = document.getElementById("shopOffersPartial");
console.log(shopOffersPartial);
const newContent = '<%= j render "shops/shop_offers", offers: @offers %>';
shopOffersPartial.innerHTML = newContent;

, который обновит содержимое партиала в show.html.erb:

<div id="shopOffersPartial">
   <%= render "shops/shop_offers", offers: @offers %>
</div>

К сожалению, я никогда не вижу это сообщение.Я просто вижу ответ fetch:

response back from the FETCH api

Журнал GET выглядит следующим образом:

Started GET "/shops/1?query=j" for 127.0.0.1 at 2019-03-04 00:47:48 +0100
Processing by ShopsController#show as JS
  Parameters: {"query"=>"j", "id"=>"1"}
  User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ /Users/albert/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
  Shop Load (0.4ms)  SELECT  "shops".* FROM "shops" WHERE "shops"."user_id" = $1 LIMIT $2  [["user_id", 1], ["LIMIT", 1]]
  ↳ app/controllers/shops_controller.rb:92
  Offer Load (0.4ms)  SELECT "offers".* FROM "offers" WHERE "offers"."shop_id" = $1  [["shop_id", 1]]
  ↳ app/controllers/shops_controller.rb:92
  Shop Load (0.6ms)  SELECT  "shops".* FROM "shops" WHERE "shops"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/shops_controller.rb:50
  Rendering shops/show.js.erb
  Rendered shops/show.js.erb (0.4ms)
Completed 200 OK in 34ms (Views: 17.0ms | ActiveRecord: 1.8ms)

Мне удается выполнить запрос в формате js, мне удается отобразить shops/show.js.erb, но почему-то я не вижу сообщения в консоли.

Я даже вижу ответ в Chrome DevTools:

enter image description here

Любая помощь?

Я также попробовал это:

jQuery + Ajax + Haml.Файлы js.erb не запускаются

...