用户访问我的网站,填写一份AJAX / JSON表格。
BreakDown
我将json对象传递给外层空间。
$.ajax({
url: foo_url,
data: dataString,
type: "POST",
dataType: 'json',
success: function(data) {
比我的控制器中的对象失败
respond_to do |wants|
wants.json { render :json => {:errors => @card_signup.errors, :html => (render_to_string :partial => '/card_signups/new_form') } }
end
然后我的控制器加载第二个部分。
这有效地隐藏了第一个,并将新的一个放在首位。不知道在代码中如何或在何处发生这种情况,它只是因为控制器调用它而发生。
然后点击并显示免责声明
当免责声明出现时,最新的表单完全消失,只留下旧的未经验证的糟糕表格。同样,系统中没有代码说这样做,它只是应用程序在加载两个表单时所做的事情,并且失败了。
按发送
Blam,它尝试注册唯一的表单(失败的表单),整个应用程序失败。
大问题:
我怎样才能至少停止对象呈现两次,并且只是让它更新表单。这应该可以解决整个问题。
基本上不是告诉它再次渲染new_form,而是如何告诉它只返回带有错误的旧表单?
答案 0 :(得分:1)
没有更多的代码,我无法弄清楚为什么你的表格消失了,但是关于我的评论,这里有。 在ajax表单提交上将数据发送到服务器进行验证。如果数据有效,则向客户端发送带有status属性的json对象。如果数据无效,则向客户端发送具有status属性的相同json对象和将保存错误消息的另一个属性。它应该是这样的:
// validation ok
response = {status: 'ok'}
// validation errors
response = {status: 'error', msg: 'Invalid username<br />Invalid email addres...'}
在客户端检查响应的状态。如果等于'ok'做某事,否则将response.msg附加到页面上的任何容器元素
我希望我清楚自己。 祝你好运
答案 1 :(得分:1)
查看发布表单并处理返回的JSON数据的JavaScript代码会有所帮助。
我有点同意Vlad你不会返回表单的整个HTML,而是编写一些JavaScript代码来显示现有表单上的错误消息。这实际上就是我如何处理它,但如果你想把JavaScript保持在最低限度,你可以做类似以下的事情:
在您的网页上,这应该来自您的new_form部分:
<form id="my_form">
....
</form>
您的javascript提交表单并处理回调:
$.ajax({
url: foo_url,
data: dataString,
type: "POST",
dataType: 'json',
success: function(data) {
if (data.errors) {
$("#my_form").html(data.html); // replace old form
}
else {
// Everything was OK, so do something here. Perhaps reset the form?
}
}
});