“ $ .ajax不是函数”,但仅当调用放在函数内部时

时间:2019-07-02 16:36:15

标签: javascript jquery ajax model-view-controller

自从我现在进行网络编程以来已经有一段时间了,并且设法使自己陷入麻烦。解决某人的问题可能微不足道,但我已经在网上进行了大量搜索。我所能找到的是使用正确的jQuery源解决“ $ .ajax不是函数”问题的各种方法。我知道了。我想知道的是,为什么不在JavaScript函数中时,ajax调用可以正常工作?一旦将其放入函数中,就会出现“ $ .ajax不是函数”的问题。这是我的资料来源:

<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>

<script type="text/javascript">
function callback() {}
$(".dropdown-item").on("click", function () {
    // Does not work
    callAjax();
});

// Does not work if called from wherever
function callAjax(){
    $.ajax({
        url: '@Url.Action("ajax", "Company")',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        type: "POST",
        data: { name: "myName" },
        success: callback
    });
}

// Does work (Same as above, just outside function)
$.ajax({
    url: '@Url.Action("ajax", "Company")',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    type: "POST",
    data: { name: "myName" },
    success: callback
});
</script>

1 个答案:

答案 0 :(得分:2)

这告诉我们文件中稍后的一些脚本代码是:

  1. 调用jQuery的noConflict函数,该函数释放$标识符,或者

  2. 包括一些脚本,这些脚本会覆盖$中的值(例如:“ Slim”构建中的MooTools.js,Prototype.js甚至是jQuery本身)

您可以通过将代码包装在使用自己的$的函数中来解决此问题,如下所示:

(function($) {
    // ...your code here, can use `$` without worrying...
})(jQuery); // <==  Passes in `jQuery`, which is a synonym for `$`

即使以后的某些代码调用noConflict,甚至完全覆盖$(甚至是jQuery),该代码仍将继续工作,因为它可以获取{{1}的值}的运行时间。