JS:如果不是else语句,则回调不是函数

时间:2019-07-03 19:04:26

标签: javascript ajax google-chrome callback

使用Google chrome进行编译时,该函数的else语句中无法识别

回调。尝试运行以下代码时,我的site.js文件出现错误:

function changeSetting(callback) {
    var testswitch = document.getElementById("switch");
    if (testswitch.checked) {
        $.ajax({
            type: 'GET',
            url: '/api/ct/off/changeSetting',
            cache: false,
            error: function (jqXHR, textStatus, errorThrown) {
            },
            success: function (result) {
                //No error here
                callback();
            }
        });
    }
    else if (!testswitch.checked) {
        $.ajax({
            type: 'GET',
            url: '/api/ct/on/changeSetting',
            cache: false,
            error: function (jqXHR, textStatus, errorThrown) {
            },
            success: function (result) {
                //ERROR: Callback is not recognized as a function
                callback();
            }
        });
    } else {
        return;
    }
}

此函数的唯一实例是

changeSetting(displayEmail());

未捕获的类型错误:回调不是函数

2 个答案:

答案 0 :(得分:1)

仅传递displayEmail而不是在changeSetting函数的参数中调用

changeSetting(displayEmail);

答案 1 :(得分:1)

问题出在您的函数调用上。

<script>
function changeSetting(callback) {
....
}

function displayEmail() {
  return "email displayed"; // dummy value in this case 
}
</script>

想象一下例如运行此代码。

changeSetting(displayEmail()); // first the display email function is evaluated

请注意,我们正在使用括号displayEmail()来调用()函数。这意味着我们将运行它并返回其return值,无论它是未定义的,还是在我们的情况下为"email displayed"

在评估您作为回调传递的函数之后,它会简化为不是函数的内容,从而导致错误。伪明智的做法是“简化”。

changeSetting("email displayed"); // "email displayed" is obviously not a function

要解决此问题,只需先不调用该函数,然后将指针传递给该函数即可,该指针就是displayEmail

changeSetting(displayEmail);