Javascript Ajax调用返回HTML页面作为响应,而不是呈现页面(Rails)

Javascript Ajax调用返回HTML页面作为响应,而不是呈现页面(Rails),javascript,ruby-on-rails,angularjs,ajax,render,Javascript,Ruby On Rails,Angularjs,Ajax,Render,嘿,在呈现.erb文件时遇到了问题,在我的AJAX调用中,我调用了rails上的create操作,在那里我验证和处理表单数据,并将完成的订单数据作为render:json发送回,这很好 我有一个条件来检查参数是否存在,如果存在,则完成的订单数据通过render:json作为响应传递回来 如果它不存在,它将呈现一个收据页面 问题是当我呈现收据页面时,完整的HTML收据页面作为响应返回,而不是呈现页面。请帮忙 $scope.placeOrder = function() { var

嘿,在呈现.erb文件时遇到了问题,在我的AJAX调用中,我调用了rails上的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.log('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.log('Error: missing Order Number from Order Confirmation data.', response.data);
              }

              console.log('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.log('Base Url: ', baseUrl);

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

              }

              };
            })(this));


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

    } // end placeOrder

“而不是呈现页面”是什么意思?如果您希望将呈现的HTML插入DOM,那么您必须自己在JS中执行此操作。我想这就是我在这里的断开连接,因为我在rails控制器中,它将呈现我的receipt.HTML.erb文件。它正在呈现收据。然后将其作为对JS请求的响应发送回去。然后必须对返回的HTML进行处理。例如,将其插入页面。当你说你希望它被“呈现”时,我想你的意思是你希望页面改变。但是,您正在进行AJAX调用,因此除非您更改页面,否则页面不会更改。这很有意义,谢谢。
# Redirect to orderComplete URL if it's set
  if !@orderComplete.blank?
      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