他の多くの人と同様に、私のウェブサイトはjQueryを使っています。開発者ツールを開くと、XMLHTTPRequestが
エンドユーザーのエクスペリエンスに悪影響を与えるため、非推奨です。
続けて ドキュメント の一部を読みましたが、かなり技術的でした。 XMLHTTPRequestからWHATWGに移行した結果を簡単な言葉で説明できる人はいますか?それは2012年に起こったと言います。
また、文書には、ワーカーの外部にあるSynchronous XMLHttpRequestがWebプラットフォームから削除されている最中であると記載されています。
この警告を回避するために、使用しないでください。
async: false
あなたの$.ajax()
呼び出しのいずれかで。これはXMLHttpRequest
の唯一の非推奨機能です。
デフォルトはasync: true
なので、このオプションをまったく使用しないのであれば、機能が本当に削除されてもコードは安全なはずです(おそらくそうではないでしょう - 標準から削除されるかもしれませんが、私はブラウザを賭けます)長年にわたってそれをサポートしていきます)。
これは、ボディセクションの終わりの直前に頭の外側の外部jsへのリンクを持つことによって起こりました。あなたは知っています、これらのうちの1つ:
<script src="http://somesite.net/js/somefile.js">
JQueryとは無関係です。
あなたはおそらく同じことがこのような何かをしているのを見るでしょう:
var script = $("<script></script>");
script.attr("src", basepath + "someotherfile.js");
$(document.body).append(script);
しかし、私はその考えを試していません。
jQuery.ajax()
にasync
パラメータを使用していません。また、次のように返されるコンテンツの一部としてscriptタグを含めていません。
<div>
SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script>
私の状況は、2つのdivを同時に更新する目的で、2つのAJAX要求を連続して呼び出していることです。
function f1() {
$.ajax(...); // XMLHTTP request to url_1 and append result to div_1
}
function f2() {
$.ajax(...); // XMLHTTP request to url_2 and append result to div_2
}
function anchor_f1(){
$('a.anchor1').click(function(){
f1();
})
}
function anchor_f2(){
$('a.anchor2').click(function(){
f2();
});
}
// the listener of anchor 3 the source of problem
function anchor_problem(){
$('a.anchor3').click(function(){
f1();
f2();
});
}
anchor_f1();
anchor_f2();
anchor_problem();
a.anchor3
をクリックすると、警告フラグが表示されます。f2呼び出しをclick()
関数で置き換えることで問題を解決しました。
function anchor_problem(){
$('a.anchor_problem').click(function(){
f1();
$('a.anchor_f2').click();
});
}
それは @ henri-chan によってコメントとして言及されました、しかし私はそれがもう少し注意に値すると思います:
JQuery/javascriptを使用して要素のコンテンツを新しいHTMLで更新し、この新しいHTMLに<script>
タグが含まれている場合、それらは 同期 のように実行され、このエラーが発生します。スタイルシートについても同様です。
コンソールウィンドウに(複数の)スクリプトやスタイルシートがXHR
としてロードされているのを見ると、これが起こっていることがわかります。 (Firefox)。
私の回避策:コードをバッファにダンプする非同期要求を使用します。毎秒バッファをチェックするループがあります。ダンプがバッファに到着したら、コードを実行します。タイムアウトも使います。エンドユーザーにとって、ページはあたかも同期要求が使用されるかのように機能します。