我在Rails中有一个模板,我使用ajax将一些参数提交给我的控制器中的一个动作。
<script type="text/javascript">
$(document).ready(function() {
$("#subscribe-form").on('submit', function(e) {
e.preventDefault();
var form = $('#subscribe-form')
if (!$(form).valid()) {
return false;
}
showProcessing();
client.tokenizeCard({
number: $('input[card-info=number]').val(),
expirationDate: $('select[card-info=expiry_month]').val()+ "/" + $('select[card-info=expiry_year]').val(),
cvv : $('input[card-info=cvv]').val()
},function (err, nonce) {
console.log(nonce);
hideProcessing()
if(err){
$(".alert-danger").show().text("Couldn't process your card");
hideProcessing();
return;
}
console.log(nonce);
if ($("input[name='braintreeToken']").length == 1) {
$("input[name='braintreeToken']").val(nonce);
} else {
form.append("<input type='hidden' name='braintreeToken' value='" + nonce + "' />");
}
console.log(nonce);
var options = {
success: subscribeResponseHandler,
complete: hideProcessing,
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
dataType: 'json',
//url: 'http/localhost:3000/subscription/create'
};
$(form).ajaxSubmit(options);
});
return false;
});
});
</script>`
这就是我如何将params提交给我的&#34; action&#34;我的&#34;订阅&#34;控制器中的方法。
` <form action="/subscription/create" method="post" id="subscribe-form">
这会进入我的创建操作。 我有这行代码
if true then
File.open("letssee.txt", 'w') { |file| file.write("eftase edw" )}
customer.update(has_plan: true)
respond_to do |format|
format.html { redirect_to(new_professional_session_path, :notice => 'Feedback was successfully updated.') }
format.js
end
#this also does not work
#redirect_to(new_professional_session_path, format: :html)
return
else
File.open("letssee.txt", 'w') { |file| file.write("den eftase" )}
redirect_to :action=>'new'
return
end
在我的终端中,它说专业/ sing_in正在渲染。 它说它已经成功地重定向到那里。 当然这条路线绑定到这条路径助手&#34; new_professional_session_path&#34;。 但它不会改变页面.. 它说它被重定向但它没有......
Sometikes虽然存在模板,但我也遇到了模板错误。 有什么建议吗?
修改 如果我把它放在顶部, respond_to:html,:js
我明白了 ActionView :: MissingTemplate - 缺少模板订阅/创建,应用程序/创建{:locale =&gt; [:en],:formats =&gt; [:js,:html],:variants =&gt; [],:handlers = &gt; [:erb,:builder,:raw,:ruby,:coffee,:arb,:jbuilder]}。
答案 0 :(得分:0)
您正在通过jQuery提交异步请求(处理为类型js),因此无法在您的控制器中重定向。
但是,您可以在js响应视图中重定向:
window.location= '<%= new_professional_session_path %>'
答案 1 :(得分:0)
您将其作为JSON发送,并且您的控制器尝试以JSON身份回答。
<强>控制器:强>
respond_to do |format|
format.html { redirect_to(new_professional_session_path, :notice => 'Feedback was successfully updated.') }
#add this one here
format.json { render status: 200, json: new_professional_session_path }
format.js
end
<强> $的Ajax 强>
var options = {
success: subscribeResponseHandler,
complete: hideProcessing,
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
dataType: 'json',
//url: 'http/localhost:3000/subscription/create'
};
# HERE!
# I dnt know whats exactly callback will be here.
function subscribeResponseHandler(responseText, statusText) {
window.location.href = 'https://localhost:3000/professional/sign_in'
}
$(form).ajaxSubmit(options)