我正在开发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']);
对此问题有任何想法或经验吗?
答案 0 :(得分:0)
我找到了解决方案,我想将调试时间节省给任何出现400 Bad Request错误且返回零的人。
神奇之处在于admin-ajax.php的末尾。有一个条件可以检查用户是否已登录。对此,它只是调用给定的动作。可能的操作名称前缀变体为:
wp_ajax_nopriv _ [yourActionName],如果您希望对任何人(即使他们没有登录)都可以采取行动,或者
wp_ajax _ [yourActionName],如果您只想限制已登录用户的操作,并阻止未登录用户访问。
admin-ajax.php使用$ _REQUEST,因此您可以将操作名称都放置在URL中或作为表单一部分的隐藏字段。在这种情况下,您的操作名称将不会出现在被调用的ajax URL中。