Javascript TypeError:$(…)。DataTable不是函数:DataTables在没有$.noConflict的情况下无法工作(true)
我刚刚发现,我正在玩它。该页面的任务是根据客户机的参数搜索帖子,返回一个JSON,该JSON在不重新加载页面的情况下随时填充表。我面临的问题是:Javascript TypeError:$(…)。DataTable不是函数:DataTables在没有$.noConflict的情况下无法工作(true),javascript,jquery,datatables,Javascript,Jquery,Datatables,我刚刚发现,我正在玩它。该页面的任务是根据客户机的参数搜索帖子,返回一个JSON,该JSON在不重新加载页面的情况下随时填充表。我面临的问题是: TypeError:$(…)。数据表不是函数。jQuery在数据表插件(完美)加载之前(完美)加载。jQuery不会被加载两次(除非DataTables自己加载jQuery,但我不这么认为)。 装货顺序正确。我使用的是Laravel,jQuery作为每个页面的第一个脚本加载到layouts/app.blade.php。所有视图都扩展了该布局,每个视图
。jQuery在数据表插件(完美)加载之前(完美)加载。jQuery不会被加载两次(除非DataTables自己加载jQuery,但我不这么认为)。 装货顺序正确。我使用的是Laravel,jQuery作为每个页面的第一个脚本加载到TypeError:$(…)。数据表不是函数
。所有视图都扩展了该布局,每个视图的特定脚本都加载到layouts/app.blade.php
中@部分(“脚本”)
- 在调用
$(“#结果”).DataTable()之前,我找到并调用了
。现在,该插件工作正常,但与jQuery相关的所有其他内容都返回$.noConflict(true)
$不是函数(尤其是新的$.ajax调用)
TypeError:$(…).dataTable不是一个函数,在不使用$的情况下抛出并解决它。noConflict(true)
有人知道吗
脚本的加载顺序:
layouts/app.blade.php
<!-- Scripts -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
<script src="{{ asset('js/admin/main.js') }}"></script>
@yield('scripts')
@extends('layouts.app')
@section('scripts')
<script src="//cdn.jsdelivr.net/npm/flatpickr"></script>
<script src="//cdn.datatables.net/1.10.18/js/jquery.dataTables.min.js"></script>
<script src="{{ secure_asset('js/helpers.js') }}"></script>
<script src="{{ secure_asset('js/admin/Values.js') }}"></script>
<script src="{{ secure_asset('js/SVGTools.js') }}"></script>
<script src="{{ secure_asset('js/admin/Search.js') }}"></script>
<script src="{{ secure_asset('js/admin/Delete.js') }}"></script>
<script src="{{ secure_asset('js/admin/blog/post/PostSearch.js') }}"></script>
<script src="{{ secure_asset('js/admin/blog/post/index.behaviour.js') }}"></script>
@endsection
下面是将数据显示到表中的代码部分(在PostSearch.js
):
尽管很遗憾,我没有找到问题的根源,但使用了jQuery.noConflict()
而不是$。noConflict()
使脚本正常工作,而没有造成以下$
别名崩溃。@t.J.Crowder感谢您的评论!我使用的是Laravel,jQuery加载到layouts/app.blade.php
中的每个页面中。所有视图都扩展了该布局,每个页面的特定脚本在@section(“scripts”)
@T.J.Crowder中加载。我编辑了我的问题,添加了显示我加载的脚本和顺序的代码。
this.search = function () {
var getData = function () {
var v = new Values();
v.collect('getValue');
console.log(v.getCollection.raw);
return v.getCollection.raw;
};
/**
* Display the data into the table.
*
* @param {Object} data
* @param {Function} callback
*/
var displayData = function (data, callback) {
if ( ! data.length ) {
// No result
document.getElementById('no-result').innerText = 'Nessun risultato per "'+document.getElementById('search').value+'"';
} else {
// Yes results
document.getElementById('no-result').innerText = "";
// $.noConflict(true);
$('#results').DataTable( {
"ordering": true,
"data": data,
"searching": true,
"columns": [
{'data':'id'},
{'data':'title'},
{'data':'category'},
{'data':'article'},
{'data':'likes'},
{'data':'status'},
{'data':'publication_datetime'},
{'data':'id'}
]
});
}
callback();
};
/**
* Empty the table.
*/
var emptyData = function () {
document.getElementsByTagName('tbody')[0].innerHTML = '';
};
new Search({
events: {
"click": document.getElementById('search')
},
url: function () {
return route_resource_admin_blog('posts', 'show', 'search')
},
data: function () {
return getData();
},
clear: function () {
emptyData();
},
previousStuff: function (target, searchTerm) {
},
successCallback: function (data, textStatus, jqXHR) {
console.log('SUCCESS');
displayData(data, function () {
});
},
errorCallback: function (jqXHR, textStatus, errorThrown) {
},
beforeSend: function (jqXHR, settings) {
},
complete: function (jqXHR, textStatus) {
}
});
};