Ajax Call возвращает HTML-страницу в качестве ответа вместо страницы рендеринга (Rails)

Привет, у меня проблема с рендерингом файла .erb, в моем вызове AJAX я вызываю свое действие create на рельсах, где я проверяю и обрабатываю данные формы и отправляю обратно завершенные данные заказа как render: json, который отлично работает.

У меня есть условие, которое проверяет, существует ли параметр, если он есть, то завершенные данные заказа передаются обратно в качестве ответа через render: json

Если его не существует, отобразится страница с квитанцией.

Проблема в том, что когда я визуализирую страницу квитанции, полная страница квитанции в формате HTML возвращается в качестве ответа, а не отображает страницу. Пожалуйста помоги!

$scope.placeOrder = function() {
        var body = composeOrderBody();
        var isValid = validateForm(body.order);

        if (isValid) {
          var orderComplete = '<%= @orderComplete %>';
          var baseUrl = '<%= request.base_url %>';

          console.info('Passing order object: ', body.order);


          $http({
              method: 'POST',
              headers: {
                'Content-Type': 'application/json'
              },
              url: checkout_url,
              data: {
                order: body.order,
                xhr_request: true
              },
            }).then((function(_this) {
              return function(response) {

              if (typeof response.data == 'undefined' || response.data == null || !response.data) {
                 console.info('Error: missing Order Number from Order Confirmation data.', response.data);
              }

              console.info('Order Confirmation response data object:' , response.data);

              if (orderComplete) {
                var redirectUrl = 'http://' + orderComplete
                var order_params = `?oid=${response.data.oid}?cart=${response.data.cart}?total=${response.data.total}`
                window.location.href = redirectUrl + order_params;
              } else {
                console.info('Base Url: ', baseUrl);

                // window.location.href = `${baseUrl}/receipt`;

              }

              };
            })(this));


        } else {
          console.info('Form Validation or Stripe Validation Failed');
        }

    } // end placeOrder

Код Rails

# Redirect to orderComplete URL if it's set
  if [email protected]?
      puts 'orderComplete parameter is not blank'
    # Sum up all the line item quantities
    qty = @order.line_items.inject(0) {|sum, line_item| sum + line_item.quantity}

    # Get all of the coupons (and values) into a string
    coupons = @order.applied_coupons.map { |coupon| coupon.coupon }.join(',')
    coupon_values = @order.applied_coupons.map { |coupon| '%.2f' % coupon.applied_value.to_f }.join(',')

    order_params = {
      "oid" => URI::escape(@order.number),
      "cart" => URI::escape(@cart),
      "total" => URI::escape('%.2f' % @order.total),
    }

    @redirectUrl = URI.parse(URI.escape(@orderComplete))
    @redirectUrl.query = [@redirectUrl.query, order_params.to_query].compact.join('&')
    @redirectUrl = @redirectUrl.to_s

    if params[:xhr_request]

     render json: order_params.to_json

     return

    end

    render 'receipt_redirect', :layout => 'receipt_redirect'
  else
      puts 'OrderComplete Parameter is blank'

     render 'receipt', :layout => 'receipt', :campaign => @campaign
  end

Что значит «вместо рендеринга страницы»? Если вы ожидаете, что визуализированный HTML-код будет вставлен в DOM, вам придется сделать это самостоятельно в своем JS.

jvillian 30.05.2018 00:22

Я думаю, что это мое отключение, я подумал, что, поскольку я был внутри контроллера rails, он отобразит мой файл accept.html.erb.

Errol Wallace 30.05.2018 00:33

Это является рендеринг чека. А затем отправьте его обратно в качестве ответа на ваш JS-запрос. Затем вам нужно сделай что-нибудь с возвращенным HTML. Мол, вставь на свою страничку. Когда вы говорите, что ожидаете «отрисовки», я думаю, вы имеете в виду, что ожидаете изменения страницы. Но вы делаете вызов AJAX, поэтому страница не изменится, пока вы ее не измените.

jvillian 30.05.2018 00:40

В этом есть смысл, спасибо.

Errol Wallace 30.05.2018 14:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
67
0

Другие вопросы по теме