【问题标题】:js error on gravity forms重力形式的js错误
【发布时间】:2014-07-10 06:49:47
【问题描述】:

我们在 wpengine 上托管 wordpress 网站。在这个站点上,我们正在使用重力形式,但由于某种原因它停止了工作。我们得到的只是一个 js 错误

Uncaught ReferenceError: gformInitSpinner is not defined (index):135
(anonymous function) (index):135
o jquery.min.js:2
p.fireWith jquery.min.js:2
e.extend.ready jquery.min.js:2
c.addEventListener.B

现在,如果我在本地计算机上设置站点,它可以正常工作。有没有人遇到过这个问题?有人知道为什么会这样吗?

【问题讨论】:

  • 忘了说重力形式是1.8.8版
  • 刚刚查看了gravityforms.js 文件,我看不到任何名为gformInitSpinner 的函数,或者实际上插件文件夹中的其他任何地方。这应该放在哪里?

标签: wordpress gravity-forms-plugin


【解决方案1】:

此问题的最常见原因是gravityforms.js 文件被包含在页脚中,而它应该在页眉中。

如果您使用函数调用嵌入表单,则应使用第二个函数调用将脚本和样式表包含在 header.php 中

// gravity_form_enqueue_scripts($form_id, $ajax);
gravity_form_enqueue_scripts(4, true);

https://docs.gravityforms.com/gravity_form_enqueue_scripts/

【讨论】:

  • 感谢您抽出宝贵时间重播。通过简码将表单添加到模板 就像我说的(我认为这希望能帮助某人查明问题)它适用于我的本地机器但不适用于 wpengine 还有其他想法吗?
  • 这对我有用,尽管它引起了 2 个 PHP 警告。解决方案是在字符串数组键周围加上引号:“form_id”、“ajax”
  • @Forxs form_id & ajax 是按照gravity_form_enqueue_scripts( $form_id, $is_ajax ); (占位符参数)的变量。警告的原因是它们被解释为常量。完全删除该函数调用,只需调用该函数一次,为第一个参数 $form_id 传递一个数字 ID,为第二个参数 $ajax 传递一个布尔值。
【解决方案2】:

我遇到了完全相同的问题,并设法将其追溯到一些主题代码。

我使用的是bones theme,它取消注册默认的 jQuery JS 并使用 Google CDN 添加自己的,例如:

// we don't need the Wordpress jquery as we are loading our own version
add_action('wp_enqueue_scripts', 'stnic_remove_jquery');
function stnic_remove_jquery(){
    if(!is_admin()) {
        wp_deregister_script('jquery');
    }
}


// loading modernizr and jquery, and reply script
function bones_scripts_and_styles() {
    if (!is_admin()) {
        wp_register_script( 'cdn-jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js', array(), '', false );
    }
}

如您所见,它deregister 是默认的jquery 脚本,然后添加自己的cdn-jquery 脚本,这很好,除了重力表单脚本依赖于@987654326 @ 而不是cdn-jquery

因为他们看不到默认的jquery 脚本,所以他们没有加载,而且他们似乎默默地失败了,只是发出这个 JavaScript 错误,因为所述 JavaScript 是在没有检查依赖关系的情况下加载的。

无论如何,我通过将骨骼注册脚本重命名为 jquery 来修复它,这可能不是解决此问题的最佳方法,但它确实有效。

或者,注释掉这两段代码也可以解决这个问题(并保留默认的 Wordpress JS)。

不确定其他主题是否这样做,但可能值得在您的主题中搜索wp_deregister_script('jquery'); 或至少切换到默认主题以查看您是否遇到同样的问题(这就是我指出的方式)。

【讨论】:

    【解决方案3】:

    好的,我解决了这个问题。由于某种原因,form_display.php 文件由于某种原因不是最新的。所以我只是将那个文件推送到服务器并修复它。

    【讨论】:

    • 您好,可以分享一下您推送到服务器的form_display.php吗?
    【解决方案4】:

    您还可以手动将 GF 的必要脚本添加到 header.php(无需注册/注销 jQuery 的操作!)。示例:

    <link rel='stylesheet' id='gforms_formsmain_css-css'  href='/wp-content/plugins/gravityforms/css/formsmain.min.css' type='text/css' media='all' />
    <link rel='stylesheet' id='gforms_ready_class_css-css'  href='/wp-content/plugins/gravityforms/css/readyclass.min.css' type='text/css' media='all' />
    <link rel='stylesheet' id='gforms_browsers_css-css'  href='/wp-content/plugins/gravityforms/css/browsers.min.css' type='text/css' media='all' />
    <script type='text/javascript' src='/wp-content/plugins/gravityforms/js/jquery.json-1.3.js'></script>
    <script type='text/javascript' src='/wp-content/plugins/gravityforms/js/gravityforms.min.js'></script>
    

    【讨论】:

    • 不建议对脚本和样式进行硬编码,因为它们可能会因表单使用的功能而异。当未来版本更改 Gravity Forms 2.5 中的新标记所发生的文件名称时,它也会中断。
    【解决方案5】:

    我刚遇到这个问题,就我而言,它是由 CloudFlare RocketLoader™ 引起的。 禁用后,表单加载没有问题。

    【讨论】:

      【解决方案6】:

      将 Gravity 表单的脚本移动到页脚

      add_filter("gform_init_scripts_footer", "init_scripts");
      function init_scripts() {
          return true;
      }
      

      【讨论】:

      • 从 Gravity Forms 2.5 开始默认启用此功能。
      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多