【问题标题】:Function not defined when using promises inside AJAX call在 AJAX 调用中使用 Promise 时未定义函数
【发布时间】:2020-06-22 11:39:28
【问题描述】:

上下文

我正在尝试加载从我的数据库接收到的类似消息数。我通过执行一个可以正常工作并从数据库中获取消息的 AJAX 调用来做到这一点,如下所示:

function getThreads() {

    $.ajax({
        url: 'includes/index/getForums.php',
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            data.forEach(function(item) {

                if (item.error == undefined) { //if not empty

                    let newContent =
                    //insert content here (I removed it for simplicity's sake)

                    let appended = $(newContent).appendTo(".threadsContainer");

                    ///start of the code in question
                    var forumId = $(appended).find(".forum_id").val();
                    var idUsers = $(appended).find(".idUsers").val();

                    var checkLike = checkLike(idUsers, forumId);
                    checkLike.done(function(data) {

                        console.log(data);

                    });
                    //end of the code in question

                }

            });
        }
    });

}

从数据库接收到消息后,我想检查每条消息的点赞数,所以我包含一个承诺:

var checkLike = checkLike(idUsers, forumId);
checkLike.done(function(data) {

    console.log(data);

});

函数checkLike如下:

function checkLike(idUsers, forumId) {

    return $.ajax({
        url: 'includes/replyThread/checkLike.php',
        type: 'POST',
        data: {idUsers: idUsers, forumId: forumId}
    });

}

问题

我的问题是,我没有记录数据,而是收到一条错误消息:

Uncaught TypeError: checkLike is not a function

问题

如何更改此代码以便将函数视为函数?我在同一网站的其他页面上使用了类似的代码,它们运行良好。我不确定我是否遗漏了一些简单的东西,或者我是否在某处缺乏理解。有任何想法吗?让我知道是否有任何混淆。谢谢。

【问题讨论】:

  • 为什么要同时定义同名的函数和变量?只有一个命名空间,因此您使用相同名称的两次尝试相互冲突。不要那样做,你就不会遇到这样的问题。

标签: jquery ajax promise


【解决方案1】:

我找到了解决方案 - 我只是将调用 checkLike 函数的变量的名称更改为 var checkLikeCount = checkLike(); 而不是 var checkLike = checkLike();。这可能是此类问题的解决方案。

【讨论】:

  • 阅读标准以准确了解正在发生的事情会很有趣。我的猜测是等号(var checkLike)左边的代码将值undefined重新赋值为checkLike,等号右边的代码在赋值完成后执行。
猜你喜欢
  • 2020-06-05
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2021-09-17
  • 2019-02-20
  • 1970-01-01
  • 2015-07-16
相关资源
最近更新 更多