POST "admin-ajax.php" 400 在 WordPress 多站点用户前端页面
POST "admin-ajax.php" 400 in WordPress Multisite User Frontend Pages
我试图在 WordPress Multisite 的插件的用户前端页面中使用 AJAX,但是 admin-ajax.php 生成 错误请求 400 并且总是失败。
- 开发 WordPress 插件 - AJAX 在管理页面中运行良好
- WordPress 多站点
- 测试Site_1
这是我的代码和输出的一部分,我只是缩短了它,有一个 class 来实例化 AJAX 动作,另一个在它之后使用 [= 包含 JS 文件38=] 行动..
无论如何,JS 文件正确包含并且 console.log 函数显示所有 JS 数据对象,如您在下面的代码中所见,但它总是失败并且 msg 参数打印 状态文本中的错误请求 ..我错过了什么??
/* == AJAX Class == */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' ) );
/* 1. The JS file included correctly */
wp_register_script( 'wpmu/scripts/frontend/core', 'JS_FILE.js',
array( 'jquery' ), '1.0', true );
/* 2. Localize */
wp_localize_script( 'wpmu/scripts/frontend/core', 'wpmu_ajax', array (
'ajax_url' => esc_url( admin_url('admin-ajax.php') )
)
);
/* 3. Enqueue */
wp_enqueue_script( 'wpmu/scripts/frontend/core' );
== JS FILE ==
(function ($) {
'use strict';
$.wpmu = $.wpmu || {};
$.wpmu.ajax_vars = {
ajax_url: wpmu_ajax.ajax_url,
};
$(document).ready(function () {
/* 1. DEBUG */
console.log($.wpmu.ajax_vars);
/* 2. DEBUG - OUTPUT */
-- ajax_vars:
-- ajax_url: "http://localwp.com:90/wpmu/SITE_1/wp-admin/admin-ajax.php"
/* ========= Main Code ======== */
$(document.body).on('click', '#my-wrapper .submit', function (e) {
e.preventDefault();
var server_data = {
action: 'wpmu_frontendpage',
};
$.ajax({
method: 'POST',
async: true,
url: $.wpmu.ajax_vars.ajax_url,
data: server_data,
}).done(function (response) {
alert('success');
}).fail(function (msg) {
console.log( msg );
});
return false;
});
});
})(jQuery);
为了帮助其他人,我找到了解决方案,那是因为我做了一个 IF 条件检查,如果不是管理页面并且 {wp_ajax_} 操作必须全局触发,我认为实例化 AJAX class 仅在前端用户页面需要时。
-- 旧代码 -- 错误
if( ! is_admin() ) {
/* Instantiate the AJAX class */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' ) );
}
--修正
/* Instantiate the AJAX class without NON-Admin pages condition */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' )
我试图在 WordPress Multisite 的插件的用户前端页面中使用 AJAX,但是 admin-ajax.php 生成 错误请求 400 并且总是失败。
- 开发 WordPress 插件 - AJAX 在管理页面中运行良好
- WordPress 多站点
- 测试Site_1
这是我的代码和输出的一部分,我只是缩短了它,有一个 class 来实例化 AJAX 动作,另一个在它之后使用 [= 包含 JS 文件38=] 行动..
无论如何,JS 文件正确包含并且 console.log 函数显示所有 JS 数据对象,如您在下面的代码中所见,但它总是失败并且 msg 参数打印 状态文本中的错误请求 ..我错过了什么??
/* == AJAX Class == */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' ) );
/* 1. The JS file included correctly */
wp_register_script( 'wpmu/scripts/frontend/core', 'JS_FILE.js',
array( 'jquery' ), '1.0', true );
/* 2. Localize */
wp_localize_script( 'wpmu/scripts/frontend/core', 'wpmu_ajax', array (
'ajax_url' => esc_url( admin_url('admin-ajax.php') )
)
);
/* 3. Enqueue */
wp_enqueue_script( 'wpmu/scripts/frontend/core' );
== JS FILE ==
(function ($) {
'use strict';
$.wpmu = $.wpmu || {};
$.wpmu.ajax_vars = {
ajax_url: wpmu_ajax.ajax_url,
};
$(document).ready(function () {
/* 1. DEBUG */
console.log($.wpmu.ajax_vars);
/* 2. DEBUG - OUTPUT */
-- ajax_vars:
-- ajax_url: "http://localwp.com:90/wpmu/SITE_1/wp-admin/admin-ajax.php"
/* ========= Main Code ======== */
$(document.body).on('click', '#my-wrapper .submit', function (e) {
e.preventDefault();
var server_data = {
action: 'wpmu_frontendpage',
};
$.ajax({
method: 'POST',
async: true,
url: $.wpmu.ajax_vars.ajax_url,
data: server_data,
}).done(function (response) {
alert('success');
}).fail(function (msg) {
console.log( msg );
});
return false;
});
});
})(jQuery);
为了帮助其他人,我找到了解决方案,那是因为我做了一个 IF 条件检查,如果不是管理页面并且 {wp_ajax_} 操作必须全局触发,我认为实例化 AJAX class 仅在前端用户页面需要时。
-- 旧代码 -- 错误
if( ! is_admin() ) {
/* Instantiate the AJAX class */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' ) );
}
--修正
/* Instantiate the AJAX class without NON-Admin pages condition */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' )