如何解决WordPress AJAX错误——‘my_ajax_obj未定义’
问题解决步骤
1. 修正本地化变量名不匹配问题
你在wp_localize_script里定义的变量名是my_ajax_object,但JS代码里调用的是my_ajax_obj,两者名称不一致导致变量未找到。
修改JS代码中的变量名:
function lesson_watched_call() { console.log('Lesson watched fn called.') $.post(my_ajax_object.ajax_url, { _ajax_nonce: my_ajax_object.nonce, // 修正为my_ajax_object action: "lesson_watched", lastValue_php: lastValue }); }
2. 替换脚本入队钩子(前端场景)
admin_enqueue_scripts钩子仅在WordPress后台生效,若课程视频在前端页面,需换成wp_enqueue_scripts钩子,确保脚本和本地化变量能在前端正常加载:
修改functions.php中的代码:
add_action( 'wp_enqueue_scripts', 'my_enqueue' ); // 替换为前端钩子 function my_enqueue() { wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') ); wp_localize_script( 'ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'lesson_nonce_value' ), ) ); }
3. 移走footer.php中的AJAX处理函数
AJAX处理钩子应放在functions.php中,而非模板文件footer.php,避免加载时机异常:
将以下代码移至functions.php:
add_action('wp_ajax_lesson_watched', 'add_lesson'); add_action('wp_ajax_nopriv_lesson_watched', 'add_lesson'); // 新增未登录用户支持 function add_lesson() { // 修正wp_unsplash为wp_unslash(拼写错误) $lastValue_php = isset($_POST['lastValue_php']) ? wp_unslash( $_POST['lastValue_php'] ) : ''; echo 'Howdy partner :)'; wp_die(); // 必须调用以终止AJAX请求 }
4. 确保lastValue变量已定义
调用lesson_watched_call()前,需确认lastValue变量已被正确赋值,否则会引发新的未定义错误。
5. 验证脚本加载情况
在前端页面控制台执行以下代码,确认my_ajax_object是否正常加载:
console.log(my_ajax_object);
若输出包含ajax_url和nonce的对象,则说明变量已正确注入。
内容的提问来源于stack exchange,提问作者Ian Harris
相关产品推荐
相关产品推荐

