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

如何解决网站上线后出现的Uncaught ReferenceError: like_post未定义报错

错误原因

你遇到的Uncaught ReferenceError: like_post is not defined报错核心原因是:like_post函数定义在window.onload的局部作用域内,行内onclick属性绑定的事件会默认在全局作用域查找函数,自然找不到。公网环境资源加载速度慢于本地,用户更容易在页面未完全加载、函数还未定义时点击按钮,所以仅在公网触发报错。

修改方案

第一步:修改HTML代码

删除a标签的onclick属性,新增class="like-btn"作为事件绑定的标记,修改后代码如下:

<a class="like-btn" href="<?= ROOT ?>like/post/<?php echo $ROW['postid'] ?>" style="text-decoration:none;float:left;position:relative;top:2px;">
    <svg id="icon_like" fill="<?= $Like_color ?>" width="22" height="22" viewBox="0 0 24 24">
        <path d="M21.216 8h-2.216v-1.75l1-3.095v-3.155h-5.246c-2.158 6.369-4.252 9.992-6.754 10v-1h-8v13h8v-1h2l2.507 2h8.461l3.032-2.926v-10.261l-2.784-1.813zm.784 11.225l-1.839 1.775h-6.954l-2.507-2h-2.7v-7c3.781 0 6.727-5.674 8.189-10h1.811v.791l-1 3.095v4.114h3.623l1.377.897v8.328z" />
    </svg>
</a>

第二步:修改JS代码

在原JS的window.onload回调函数末尾,新增addEventListener批量绑定事件的逻辑,修改后完整JS代码如下:

<script type="text/javascript">
     window.onload = function() {
        function ajax_send(data, element) {
            var ajax = new XMLHttpRequest();
            ajax.addEventListener('readystatechange', function() {
                if (ajax.readyState == 4 && ajax.status == 200) {
                    response(ajax.responseText, element);
                }
            });
            data = JSON.stringify(data);
            ajax.open("post", "<?= ROOT ?>ajax.php", true);
            ajax.send(data);
        }
     
        function response(result, element) {
            if (result != "") {
                var obj = JSON.parse(result);
                if (typeof obj.action != 'undefined') {
                    if (obj.action == 'like_post') {
                        var likes = "";
                        if (typeof obj.likes != 'undefined') {
                            likes = 
                                (parseInt(obj.likes) > 0) ?
                                '<svg fill="#1877f2" width="22" height="22" viewBox="0 0 24 24"><path d="M21.216 8h-2.216v-1.75l1-3.095v-3.155h-5.246c-2.158 6.369-4.252 9.992-6.754 10v-1h-8v13h8v-1h2l2.507 2h8.461l3.032-2.926v-10.261l-2.784-1.813zm.784 11.225l-1.839 1.775h-6.954l-2.507-2h-2.7v-7c3.781 0 6.727-5.674 8.189-10h1.811v.791l-1 3.095v4.114h3.623l1.377.897v8.328z"/></svg>' :
                                '<svg fill="#626a70cf" width="22" height="22" viewBox="0 0 24 24"><path d="M21.216 8h-2.216v-1.75l1-3.095v-3.155h-5.246c-2.158 6.369-4.252 9.992-6.754 10v-1h-8v13h8v-1h2l2.507 2h8.461l3.032-2.926v-10.261l-2.784-1.813zm.784 11.225l-1.839 1.775h-6.954l-2.507-2h-2.7v-7c3.781 0 6.727-5.674 8.189-10h1.811v.791l-1 3.095v4.114h3.623l1.377.897v8.328z"/></svg>';
                            element.innerHTML = likes;
                        }
                        if (typeof obj.info != 'undefined') {
                            var info_element = document.getElementById(obj.id);
                            info_element.innerHTML = obj.info;
                        }
                    }
                }
            }
        }
     
        function like_post(e) {
            e.preventDefault();
            var link = e.currentTarget.href;
            var data = {};
            data.link = link;
            data.action = "like_post";
            ajax_send(data, e.currentTarget);
        }

        // 新增逻辑:给所有点赞按钮绑定点击事件
        document.querySelectorAll('.like-btn').forEach(btn => {
            btn.addEventListener('click', like_post);
        });
     }
</script>

修改后所有事件绑定逻辑都在window.onload的作用域内,可直接访问内部定义的like_post函数,无需将函数暴露到全局,同时兼容单条/多条帖子的点赞场景。

内容的提问来源于stack exchange,提问作者rustyrice23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:06:03