发送请求时触发$.ajax is not a function错误,求排查解决方法
解决
$.ajax is not a function异常 你遇到的这个问题根源很明确:页面里先后引入了完整版本的jQuery和Slim版本的jQuery,而Slim版本会覆盖之前的完整版本,Slim版恰恰移除了$.ajax等AJAX相关的功能模块。
看你的代码,头部<head>里重复引入了两次完整的jQuery 3.2.1:
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
但在页面底部又引入了jQuery 3.3.1的Slim版本:
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
后面引入的Slim版本会覆盖之前的完整jQuery,导致$.ajax方法不存在,这就是错误的核心原因。另外,Bootstrap 4确实依赖jQuery,但Slim版本并不满足Bootstrap的全部依赖(比如部分交互组件需要AJAX或动画支持),所以使用完整版本的jQuery才是正确选择。
解决方案:
- 移除Slim版本的jQuery引入,保留完整版本的jQuery(注意只需要引入一次即可,头部重复引入的可以删掉一个)。
- 确保完整版本的jQuery在Popper.js和Bootstrap JS之前引入(Bootstrap的依赖顺序要求jQuery优先加载)。
修改后的脚本引入部分示例:
<!-- 只引入一次完整版本的jQuery --> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script> <script src="rest.js"></script> <!-- 你的点击事件脚本 --> <script> $("#signup").click(function() { var json='{"id":"SomeId","title":"SomeTitle"}'; var obj=JSON.parse(json); $.ajax({ url:"http://127.0.0.1:8080/signup", type: "POST", dataType: "json", data: obj, contentType: "application/json", cache: false, timeout: 5000, complete: function() { console.log('process complete'); }, success: function(data) { console.log(data); console.log('process sucess'); }, error: function() { console.log('process error'); }, }); }); </script>
这样修改后,$.ajax方法就能正常调用,同时也能满足Bootstrap的依赖需求。
内容的提问来源于stack exchange,提问作者Bharadwaj
相关产品推荐
相关产品推荐

