Wordpress插件ajax请求在本地可以正常运行,但可以正常生产

时间:2018-07-19 10:48:34

标签: php ajax wordpress plugins

我正在开发WP插件,通过ajax / post提交的表单在本地可以正常工作,没有任何错误,但是当我将其上传到生产环境时会丢弃400 Bad Request。 没有错误消息会恢复为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 个答案:

答案 0 :(得分:0)

我找到了解决方案,我想将调试时间节省给任何出现400 Bad Request错误且返回零的人。

神奇之处在于admin-ajax.php的末尾。有一个条件可以检查用户是否已登录。对此,它只是调用给定的动作。可能的操作名称前缀变体为:

wp_ajax_nopriv _ [yourActionName],如果您希望对任何人(即使他们没有登录)都可以采取行动,或者

wp_ajax _ [yourActionName],如果您只想限制已登录用户的操作,并阻止未登录用户访问。

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