Gravity Form提交后控制台打印表单数据失败,求有效实现方案
Gravity Form提交后打印表单数据的解决方法
你的代码无法正常工作的核心原因是:gform_confirmation_loaded事件触发时,表单已经完成提交流程,此时表单可能已被重置,或者确认内容替换了原表单的DOM区域,导致serializeArray()无法获取到提交前的真实数据。
下面是几种可靠的解决方案:
方案一:提交前缓存数据,确认时打印
先在表单提交前捕获并保存数据,再在确认加载时打印:
jQuery(document).ready(function() { let savedFormData = null; // 提交前捕获表单数据 jQuery(document).on('gform_pre_submission', function(event, formId) { if (formId === 3) { savedFormData = jQuery(`#gform_${formId}`).serializeArray(); } }); // 确认页面加载时打印缓存的数据 jQuery(document).on('gform_confirmation_loaded', function(event, formId) { if (formId === 3 && savedFormData) { console.log('完整表单数据:', savedFormData); // 可选:转成键值对对象,更易阅读 const formattedData = {}; savedFormData.forEach(item => { formattedData[item.name] = item.value; }); console.log('格式化表单数据:', formattedData); savedFormData = null; // 重置缓存,避免重复打印 } }); });
方案二:提交触发时直接获取数据
利用gform_submit事件,在提交动作触发的瞬间获取数据(此时表单数据尚未被修改或重置):
jQuery(document).ready(function() { jQuery(document).on('gform_submit', function(event, formId) { if (formId === 3) { const formData = jQuery(`#gform_${formId}`).serializeArray(); console.log('完整表单数据:', formData); // 转成键值对格式 const formattedData = {}; formData.forEach(field => { formattedData[field.name] = field.value; }); console.log('格式化表单数据:', formattedData); } }); });
方案三:通过后端钩子获取完整数据
如果需要获取Gravity Forms自动记录的额外数据(如提交IP、时间戳等),可以用PHP后端钩子,将数据输出到控制台:
在主题的functions.php文件中添加以下代码:
add_action('gform_after_submission_3', function($entry, $form) { // 将表单提交数据转为JSON格式 $entryJson = json_encode($entry); // 输出脚本打印到浏览器控制台 echo "<script>console.log('完整表单提交记录:', {$entryJson});</script>"; }, 10, 2);
内容的提问来源于stack exchange,提问作者Abu Yousuf
相关产品推荐
相关产品推荐

