Как я могу обновить все цены с помощью jQuery и AJAX?

#javascript #jquery #ruby-on-rails

#javascript #jquery #ruby-on-rails

Вопрос:

Я пытаюсь создать динамическую таблицу, которая использует AJAX для получения расчетных цен со стороны Rails для единиц аренды. У каждой единицы аренды есть информация о ценах в формате JSON (/companies/:id/locations/:id/units/:id/price.json), которую я извлекаю.

Моя проблема заключается в функции, которая устанавливает значение text для каждой единицы. Похоже, что он извлекает JSON только для первого блока, и все следующие цены после этого устанавливаются на первый блок

 Request URL: /storage_companies/2/storage_locations/4/storage_units/10/price
{id: 10, monthly_cost: 7.25, total_price: 87}
  

В UnitController я настроил метод price для вывода информации о ценах в формате JSON:

 def price
    respond_to do |format|
      format.json { render json: @storage_unit, methods: [:total_price], only: [:id, :monthly_cost, :total_price]}
    end
  end
  

и маршрут:

 resources :companies do
   resources :locations do
     resources :units do
       member do
         get :price
       end
     end
   end
end
  

Как я могу реорганизовать это, чтобы перебрать все units и установить text ?

 $(function(){
  var CompanyId = $('.storage_company').data('params-id');
  var LocationId = $('.select_location').data('params-id');
  var UnitId = $('.select_unit').data('params-id');

  $.getJSON(`/companies/${CompanyId}/locations/${LocationId}/units/${UnitId}/price`, callbackFuncWithData);

  function callbackFuncWithData(data){
    $(".monthly_estimated_price").text("$"   data.monthly_cost.toFixed(2));
    $(".total_estimated_price").text("$"   data.total_price.toFixed(2));
  };
});
  

Обновить

 $.getJSON("/prices", function(data){
    $.each(data, function (index, value) {
      var price = value;
      $(`.select_unit[data-params-id="${price.id}"]`).each(function(){
        $(".monthly_estimated_price").text("$"   price.monthly_cost);
        console.log(price)
      });
    });
  });
  

Я думаю, что я почти на месте, но все еще не до конца понимаю, как выполнять итерации и устанавливать их динамически.
введите описание изображения здесь

Комментарии:

1. CompanyId только с первого совпадения $('.storage_company') на странице. Если вам нужен запрос для каждого, вам нужно перебрать все экземпляры и сделать запрос для каждого и применить ответ к экземпляру. Или наоборот … получить все данные в массиве один раз… и перебирать данные и сопоставлять с соответствующими элементами на странице

2. И наоборот $(selector).text() , задает одинаковый текст для каждого соответствующего элемента на странице

3. @charlietfl Я думаю, что подготовка всех данных в массиве один раз и перебор данных для сопоставления с элементами на странице — лучший подход. Есть какие-нибудь примеры в Интернете, на которые я мог бы сослаться?

4. Довольно легко сопоставить уникальный идентификатор в данных с тем же идентификатором в основных повторяющихся элементах, таких как <div id="company_973">

5. @charlietfl Спасибо за понимание — я что-нибудь поищу