代码之家  ›  专栏  ›  技术社区  ›  szatti1489

wordpress插件ajax请求在本地运行良好,但在生产中

  •  0
  • szatti1489  · 技术社区  · 6 年前

    我开发了一个WP插件,通过ajax/post提交的表单在本地运行良好,没有任何错误,但是当我将它上传到生产环境时,会丢弃一个400个错误的请求。 没有错误消息,只是重新运行0(零)。

    我的jquery简单到:

    var url  = windows.globalObject.ajaxUrl,
        data = form.serialize();
    
    $.post(url, data, function (obj) {
       if (obj.success === 1) {
          content.html(obj.html);
       } else {
          console.log(obj.message);
       }
    }, 'json');
    

    这就是我在模块中注册脚本的方式:

    add_action('wp_footer', function () {
       $includes_path = plugin_dir_url(__FILE__) . '../components/includes/';
    
       wp_register_script('scripts', $includes_path . "scripts.js", array('jquery'), null, true);
       wp_enqueue_script('scripts');
    
       wp_localize_script( 'scripts', 'globalObject', ['ajaxurl' => admin_url('admin-ajax.php?action=handle_submit', 'http')]);
    });
    
    add_action( 'wp_ajax_handle_submit', [$this, 'handle_submit']);
    

    在这个问题上有什么想法或经验吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Pang Mohammad Imran    6 年前

    我找到了解决方案,我想为有400个错误请求错误并返回0的任何人节省调试时间。

    魔术在admin-ajax.php的最后部分。有一个条件检查用户是否已登录关于这一点,它只需要调用给定的操作。可能的操作名称前缀变化有:

    不驱动_ [你的行动名称]如果你想让任何人都能完成你的行动,即使他们没有登录,或者

    wp_ajax公司_ [您的操作名]如果您只想将您的操作限制为已登录的用户,并阻止对所有未登录的用户的访问。

    admin-ajax.php使用$_请求,因此您可以将您的操作名放在url中,或者作为表单的一部分放在隐藏字段中。在这种情况下,您的操作名将不会出现在调用的ajax url中。