You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:10:29