Ruby on rails 如何返回未经验证的AJAX/JSON表单进行更正?
用户访问我的站点,填写AJAX/JSON表单 细分Ruby on rails 如何返回未经验证的AJAX/JSON表单进行更正?,ruby-on-rails,ajax,json,forms,params,Ruby On Rails,Ajax,Json,Forms,Params,用户访问我的站点,填写AJAX/JSON表单 细分 我将json对象传递到外层空间 对象在我的控制器中失败 然后我的控制器加载第二个部分 然后当我点击并出现免责声明时 第二部分消失 我将json对象传递到外层空间。 $.ajax({ url: foo_url, data: dataString, type: "POST", dataType: '
$.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
然后我的控制器加载第二部分。
$.ajax({
url: foo_url,
data: dataString,
type: "POST",
dataType: 'json',
success: function(data) {
这有效地隐藏了第一个,并将新的放在上面。我不知道这在代码中是如何发生的,也不知道发生在什么地方,它只是因为控制器调用了它
然后当我单击并出现免责声明时
当免责声明出现时,最新的表单完全消失,只留下未经验证的旧表单。同样,系统中没有任何代码要求这样做,这只是应用程序在加载两个表单并失败时所做的
按发送
它试图注册唯一的表单(失败的表单),而整个应用程序失败
大问题:
如何至少停止对象渲染两次,并使其更新窗体。这几乎可以解决整个问题
基本上,我不是告诉它重新呈现新表单,而是告诉它如何返回包含错误的旧表单?如果没有更多的代码,我真的无法理解为什么您的表单会消失,但关于我的评论,这里是这样的。 在提交ajax表单时,将数据发送到服务器进行验证。如果数据有效,则向客户端发送一个带有status属性的json对象。如果数据无效,则向客户端发送相同的json对象,其中包含status属性和另一个将保存错误消息的属性。应该是这样的:
// validation ok
response = {status: 'ok'}
// validation errors
response = {status: 'error', msg: 'Invalid username<br />Invalid email addres...'}
//验证正常
响应={状态:“确定”}
//验证错误
响应={状态:“错误”,消息:“无效用户名
无效电子邮件地址…”
在客户端,检查响应的状态属性。如果等于“ok”,则执行某些操作,否则将response.msg附加到页面上的任何容器元素
我希望我说清楚了。
祝您好运查看发布表单并处理返回的JSON数据的JavaScript代码会有所帮助 我有点同意Vlad的观点,即不返回表单的整个HTML,而是编写一些JavaScript代码来显示现有表单上的错误消息。这实际上就是我处理它的方式,但是如果您想将JavaScript保持在最低限度,您可以执行以下类似操作: 在您的页面上,这应该来自您的新表格部分:
<form id="my_form">
....
</form>
为什么要重新创建表单?如果使用ajax提交数据,表单仍然存在。您可以仅返回相应的错误消息,并仅动态突出显示错误的输入fields@Vlad,这太奇怪了,因为额外的表单实际上不见了。因此,在第一次之后创建的任何东西都会消失。不确定在新渲染后会发生什么。另外,你提到的是我正在寻找的答案,我只是不知道如何实现这个想法。你能给我指个方向吗?有道理,我明白了。但它真的没有任何适用的意义。我被困住了..我怎么才能访问JSON对象呢。它似乎完全消失了。巫师!没有错误。它发布的很好,系统说它所有的错误,但是因为AJAX请求至少通过了,所以它被认为是“通过了”。啊,好的,这很有效。我发现了jQuery的隐藏部分,它让我的代码的其余部分感觉像垃圾。谢谢