私はPHP/MySQLを使用してCMSを構築しており、これまでのところjQueryを使用してテーブル列に並べ替えとフィルタリングを追加しています。通常はうまく機能しますが、並べ替え要素とフィルタリング要素が読み込まれない場合があります。これは、ページを手動で更新した場合にのみ発生し(リンクを介してアクセスした場合は発生しません)、たまにしか発生しません。更新する前に数回更新できる場合もあれば、連続して数回更新できる場合もあります。
問題が発生すると、Firebugのコンソールから次のいずれかまたは両方が通知されます。
ReferenceError:jQueryが定義されていません
ReferenceError:$が定義されていません
$(document).ready(function(){
(場合によっては:TypeError:$( "。tablesorter")。tablesorterは関数ではありません)
すべてが正常に読み込まれると、コンソールは空白になります。
CMSのすべてのページに読み込まれる私のヘッダーファイルは、次のように始まります。
<?php ob_start(); ?>
<!DOCTYPE html>
<html>
<head>
<meta name="robots" content="noindex">
<title><?=$pg_title." - ".$site_name;?> | Lucid <?=$ver_num;?></title>
<link href="/favicon.gif" rel="icon" />
<link rel="stylesheet" href="css/styles.php" type="text/css" />
<script src="js/jquery-1.8.3.min.js" async></script>
<script src="plugins/jquery-tablesorter/js/jquery.tablesorter.min.js" async></script>
<script src="plugins/jquery-tablesorter/js/jquery.metadata.js" async></script>
<script src="plugins/jquery-tablesorter/addons/pager/jquery.tablesorter.pager.min.js" async></script>
<script src="js/picnet.table.filter.min.js" async></script>
</head>
次に、フッターファイルで、さまざまな関数を呼び出します。
<script async>
$(document).ready(function(){
function validateNumber(event) {
var key = window.event ? event.keyCode : event.which;
if (event.keyCode == 8 || event.keyCode == 46
|| event.keyCode == 37 || event.keyCode == 39) {
return true;
}
else if ( key < 48 || key > 57 ) {
return false;
}
else return true;
};
$('[class=sort-order]').keypress(validateNumber);
$(".tablesorter").tablesorter({
textExtraction: 'complex'
});
var options = {
filterDelay: 100,
clearFiltersControls: [$('.filter-clear')]
};
$('.tablesorter').tableFilter(options);
$('input:not(.filter)').live("change", function () {
window.onbeforeunload = function () { return "Your changes have not been saved, if you leave the page you'll lose them" };
});
});
</script>
</body>
</html>
<?php
ob_flush();
?>
これはかなり一般的な問題であることを認識していますが、すべての解決策を試したと思います(ここにリストされているものを含む:JQuery-$は定義されていません)
setTimeoutを使用して、jQuery以外のすべてのスクリプトの読み込みを最大1秒間遅らせてみましたが、役に立ちません。
jQueryがif(jQuery)で定義されているかどうかを確認してみました-常に定義されています。
Firebugの[ネット]タブには、問題が発生したかどうかに関係なく、jQueryファイルのステータスが304NotModifiedであることが示されています。
私がすべてのスペルと構文に問題がないことを私が知る限り、それはほとんどの場合機能することを与えられるべきです。
ローカルではなく外部のWebサイトからjQueryをロードしてみましたが、違いはありません。
リモートサーバーではなく、ローカルでCMSを開発するためにXAMPPを使用していることを指摘しておく必要があります。そのため、Apacheの構成に問題があるのではないかと思いました。次に、すべてをリモートサーバーにアップロードしましたが、問題がさらに悪化していることがわかりました。これは、ページの読み込み速度に関係していることを示しています。おそらく非同期ですか?しかし、スクリプトをロードする前にjQueryがロードされることを確認するために他に何ができるかわかりません...