jQuery.jsが特定の場所に存在するかどうかを確認し、まだ存在しない場合はその場所に書き込み(インターネットから取得して)、送信することになっているWebページ(PHP/javascript)を作成しています。新しく作成された jQuery をクライアントで使用できるようにします。現在、ページの 1 回の読み込みでこれを行うことはできません。私は常にリフレッシュしなければなりません。
まず、クライアント側では、次のものがあります。
<script type="text/javascript" src="script1.js"></script>
このスクリプトは、サーバーに対して AJAX 呼び出しを行い、jQuery をチェックして、存在しない場合はディスクに書き込みます。これを通常とは異なる同期AJAX 呼び出しにすることで、他の操作が発生する前に操作が終了するようにします。これが「script1.js」の関連部分です。呼び出しは同期的であるため、readyState が 4 であることなどを確認する必要はありません。この関数は、サーバーが報告した後にのみ返されます (そうですか?それとも間違っていますか?)。
var xmlhttp = getXmlhttp(); // gets an xmlhttp object appropriate to the browser.
xmlhttp.open("POST", "check_jQuery.php", false); // 'false' for synchronous operation.
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send();
return;
一方、サーバー側 (「check_jQuery.php」) では、次のものを取得しました。
if (!is_file("jQuery.js")) {
file_put_contents("jQuery.js", file_get_contents($jQueryUrl));
}
while (!file_exists("jQuery.js")) sleep(1);
while ループは、ファイルが完全に正しく書き込まれるまで関数が戻らないようにするための手間です。それはそうしますが、問題ではないようです...クライアント側に戻り、ページのさらに下に、私は持っています:
<script type="text/javascript" src="jQuery.js"></script>
しかし、サーバーから戻る前に長時間待機しても、クライアント側のスクリプトは jQuery を見つけることができません。ただし、ページをリロードすると、正常に検出されます。
そのため、ファイルが存在するまでクライアント側の実行を遅らせようとしているにもかかわらず、クライアントがファイルが存在するかどうかを事前にサーバーに尋ねているようです。興味深いことに、404 エラーは、サーバーが戻ってファイルが正常に書き込まれるまで、javascript デバッガーに表示されません。誰かがなぜこれが起こっているのか説明できますか? ファイルを書き込む機会があるまで、クライアントにファイルを要求しないように強制する方法はありますか?