Jquery 由于某些验证而导致保存失败时,动态添加的表单字段将丢失

Jquery 由于某些验证而导致保存失败时,动态添加的表单字段将丢失,jquery,cakephp,dom,Jquery,Cakephp,Dom,有两个模型,假设A和B具有多个B关系。用户可以在创建A时关联任意多的B行。该应用程序允许用户使用JQuery动态添加和删除B行,特别是通过以下示例- 除非使用saveAll保存由于服务器端验证而失败,否则一切都很正常。在这种情况下,页面在提交时刷新,所有动态添加的字段都将丢失,用户必须从头开始重新创建所有行 有没有办法,使用JQuery动态添加的字段都不会丢失,并保留它们的旧值,与Cake的默认行为相同?可能会提出Ajax请求是一种选择,因此页面不会在服务器端验证失败时重新加载,但对我来说,这不

有两个模型,假设A和B具有多个B关系。用户可以在创建A时关联任意多的B行。该应用程序允许用户使用JQuery动态添加和删除B行,特别是通过以下示例-

除非使用saveAll保存由于服务器端验证而失败,否则一切都很正常。在这种情况下,页面在提交时刷新,所有动态添加的字段都将丢失,用户必须从头开始重新创建所有行


有没有办法,使用JQuery动态添加的字段都不会丢失,并保留它们的旧值,与Cake的默认行为相同?可能会提出Ajax请求是一种选择,因此页面不会在服务器端验证失败时重新加载,但对我来说,这不是一种选择,因为表单也有一个文件上载,而且据我所知,Ajax请求不支持文件trsnafer?

正如前面指出的,在验证时呈现视图时,可以静态地设置所有字段失败

无法通过AJAX上传文件,因为您无法从JS读取文件。尽管如此,还是有一个完善的解决方法:您可以将表单暂时放入一个不可见的iframe中,以本机方式提交表单,并触发回调,就像它是AJAX响应一样


在以AJAX方式提交表单方面非常出色,并且在遇到文件字段时透明地执行后者。

如前所述,在验证失败时呈现视图时,您可以静态地显示所有字段

无法通过AJAX上传文件,因为您无法从JS读取文件。尽管如此,还是有一个完善的解决方法:您可以将表单暂时放入一个不可见的iframe中,以本机方式提交表单,并触发回调,就像它是AJAX响应一样


在以AJAX方式提交表单方面非常出色,并且在遇到文件字段时,后者的执行是透明的。

通过AJAX调用上传文件非常有魅力,方法只是有点不同。您需要在保存表单之前上载文件,并在成功上载后将一些值存储在隐藏字段中。@JulianHollmann感谢您的输入。我想使用JsHelper进行ajax表单提交,但是CakePHP文档说JsHelper不支持通过ajax上传文件,所以我想我首先需要在没有帮助的情况下使用ajax上传文件,然后使用helper提交表单?另一个问题是,我正在使用CakePHP media helper进行文件上传附件模式,这使得像我这样的新手更难按照您的建议进行更改。您可以再次创建所有B行,因为在$this->data中有您需要的所有信息。我有很多相同格式的应用程序。对于上载文件,只需在保存/上载之前验证所有字段即可。@PauloRodrigues谢谢!重复使用$this->数据数组应该可以。@PauloRodrigues我正试图重复使用$this->数据数组,但我面临一个问题。如上所述,我有一个hasMany B关系,如果服务器端验证失败,我会计算B字段的总数,包括动态生成的字段,然后重新创建这么多字段。现在字段的数量显示正确,但当我提供字段名,如B.0.fieldname、B.1.fieldname等时,它会将它们转换为A.0、A.1等。本质上,它假定它们是父模型A字段。我无法理解我在这里做错了什么。通过ajax调用上传文件非常有效,方法只是有点不同。您需要在保存表单之前上载文件,并在成功上载后将一些值存储在隐藏字段中。@JulianHollmann感谢您的输入。我想使用JsHelper进行ajax表单提交,但是CakePHP文档说JsHelper不支持通过ajax上传文件,所以我想我首先需要在没有帮助的情况下使用ajax上传文件,然后使用helper提交表单?另一个问题是,我正在使用CakePHP media helper进行文件上传附件模式,这使得像我这样的新手更难按照您的建议进行更改。您可以再次创建所有B行,因为在$this->data中有您需要的所有信息。我有很多相同格式的应用程序。对于上载文件,只需在保存/上载之前验证所有字段即可。@PauloRodrigues谢谢!重复使用$this->数据数组应该可以。@PauloRodrigues我正试图重复使用$this->数据数组,但我面临一个问题。如上所述,我有一个hasMany B关系,如果服务器端验证失败,我会计算B字段的总数,包括动态生成的字段,然后重新创建这么多字段。现在字段的数量显示正确,但当我提供字段名,如B.0.fieldname、B.1.fieldname等时,它会将它们转换为A.0、A.1等。本质上,它假定它们是父模型A字段。我无法理解我在这里做错了什么。