javascript - Ajax 调用返回 HTML 页面作为响应而不是呈现页面(Rails)
问题描述
嘿,在渲染 .erb 文件时遇到问题,在我的 AJAX 调用中,我调用了我在 rails 上的 create 操作,我在其中验证和处理表单数据并将完成的订单数据作为 render: json 发送回,它工作正常。
我有一个条件来检查参数是否存在,如果存在,那么完成的订单数据将作为响应通过渲染传回: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
导轨代码
# 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
解决方案
推荐阅读
- flutter - Flutter video_player 声音有时与视频不同步
- javascript - 如何在Javascript中正确过滤全名字符串?
- ruby-on-rails - 对由远程参数定义的结果进行排序
- android-recyclerview - FlexboxLayoutManager 项目在滚动另一个 Recycler 视图时闪烁
- kotlin - 在我的选项卡式应用程序上寻找正确的语法来设置 setmaxlifecycle
- python - 动态地将数据附加到熊猫数据框
- c# - 匹配词汇单词和短语
- python - y = x / sum(x, dim=0) 的反向传播,其中张量 x 的大小为 (H,W)
- c# - 在应用程序配置文件中找不到名为“BACEntities”的连接字符串。” 当从 .NET 5 Api 调用 'n .NET Framwork 4.7.2 Library
- python-3.x - Numpy更改3D数组中的对角线值