【问题标题】:"$.ajax is not a function", but only if call is placed inside function“$.ajax 不是函数”,但前提是调用放在函数内部
【发布时间】:2019-11-13 08:35:49
【问题描述】:

我现在已经有一段时间没有进行网络编程了,并且设法让自己陷入了一些麻烦。为某人解决可能是一件微不足道的事情,但我在网上搜索了很多。我所能找到的只是通过使用正确的 jQuery 源来解决“$.ajax 不是函数”问题的各种方法。我已经想通了。我想知道的是,为什么 ajax 调用不在 javascript 函数中时可以完美地工作?只要把它放在一个函数中,我就会得到“$.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>

【问题讨论】:

  • 很可能,您包含 jquery 两次,而第二个版本是精简版。
  • 你在用wordpress吗?我在网站上看到了至少另一个问题,它是 wordpress auto 的结果,包括一个瘦版本的 jQuery。
  • 我一直非常小心不要使用 slim 版本(这就是为什么我还在我发布的源代码顶部包含了第一个 jQuery 包含)。但是在使用 MVC 模板时会创建许多默认文件,所以它可能包含在我不知道的某个地方。我找到了几个地方,我把它们关掉了,所以认为它已经解决了。也许我错了。
  • 作为测试,在失败的 ajax 调用之前执行console.log($.fn.jquery)(在函数内部)。这将确认/拒绝您是否拥有苗条的构建。
  • @Pelle 相当容易 F12 打开您的开发者工具,转到网络选项卡,刷新页面,然后查找对 **/*jquery*.js 文件的请求

标签: javascript jquery ajax model-view-controller


【解决方案1】:

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

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

  2. 1234563

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

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

即使后来的一些代码调用noConflict,甚至完全覆盖$(甚至jQuery),该代码仍将继续工作,因为它在运行时获取了jQuery 的值。

【讨论】:

  • @Pelle - 可能值得追踪覆盖$ 并处理它的内容。例如,如果它是 jQuery 的另一个副本,则没有必要。 (如果是 MooTools 或 PrototypeJS 之类的,页面的某些部分可能正在使用它——不幸的是,加载 both jQuery 和另一个 DOM 库会使页面相当重量级......)快乐编码!
猜你喜欢
  • 2021-01-09
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多