Firefoxデバッガを使わずにコンソールにログを追加してさまざまな変数のステータスをチェックしています。
しかし、console.log
ファイルにmain.js
を追加した多くの場所で、私は自分の素敵な小さな手書きのメッセージの代わりに次のエラーを受け取ります。
メインスレッド上の同期XMLHttpRequestは、エンドユーザーのエクスペリエンスに悪影響を与えるため、推奨されません。より多くの助けのために http://xhr.spec.whatwg.org/ /
このエラーの原因とならない、console.log
の代替手段またはラッパーのコード用途に追加できますか。
私は「それを間違ってやっている」のか?
これは私が怠惰で、返されているコンテンツの一部としてscriptタグを含んでいたときに起こりました。など:
部分的なHTMLコンテンツ
<div>
SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script>
少なくとも私の場合は、xhrを介してそのようなHTMLコンテンツを返すと、jQueryにそのスクリプトを取得するための呼び出しを行わせることになります。この呼び出しは、ロードを続行するためにスクリプトが必要であると想定しているため、asyncフラグがfalseの場合に発生します。
このような状況では、ある種のバインディングフレームワークを調べてJSONオブジェクトを返すだけでよいか、バックエンドやテンプレートによっては、スクリプトのロード方法を変更できます。
また、 jQueryのgetScript()
を使用して関連するスクリプトを取得することもできます。これは、jQueryの例をそのままコピーしたものですが、スクリプトがそのようにロードされたときに警告が表示されることはありません。
例
<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>
警告メッセージは、非同期フラグがfalseに設定されているメインスレッド内のXMLHttpRequest要求が原因である可能性があります。
https://xhr.spec.whatwg.org/#synchronous-flag :
ワーカーの外部にある同期XMLHttpRequestは、エンドユーザーのエクスペリエンスに有害な影響を与えるため、Webプラットフォームから削除される過程にあります。 JavaScriptグローバル環境がドキュメント環境である場合、開発者はasync引数にfalseを渡さないでください。ユーザエージェントは開発者ツールでのそのような使用法について警告することを強く推奨されており、が発生したときにInvalidAccessError例外をスローすることを試すことができます。
今後の方向は、ワーカースレッドでXMLHttpRequestsのみを許可することです。このメッセージはそのことを警告するものです。
私も同じ問題に直面していましたが、async:trueを設定することでそれを修正することができました。私はそれがデフォルトで真実であることを知っています、しかし私がそれを明示的に書くときそれは働きます
$.ajax({
async: true, // this will solve the problem
type: "POST",
url: "/Page/Method",
contentType: "application/json",
data: JSON.stringify({ ParameterName: paramValue }),
});
Visual Studio 2015/2017のライブデバッガーは、廃止予定の呼び出しを含むコードを注入しています。
スクリプトをajaxでロードする必要があるが、スクリプトがロードされるまでdocument readyを遅らせる必要がある場合があります。
jQueryはこれをholdReady()
関数でサポートしています。
使用例:
$.holdReady(true); //set hold
function releaseHold() { $.holdReady(false); } //callback to release hold
$.getScript('script.js', releaseHold); //load script then release hold
実際のスクリプトの読み込みは非同期(エラーなし))ですが、JavaScriptの残りの部分がdocument readyの後に実行された場合、効果は同期的になります。
このadvanced featureは通常、readyイベントが発生するのを許可する前にjQueryプラグインなどの追加のJavaScriptをロードしたい動的スクリプトローダーによって使用されます。準備ができている。
ドキュメンテーション:
https://api.jquery.com/jquery.holdready
_ jqmigrate _ :から
jQuery.holdReady()は廃止予定です)
原因:ページの全体的なパフォーマンスに悪影響を及ぼすため、
jQuery.holdReady()
メソッドは推奨されていません。このメソッドは、ページ上のすべてのコードが長時間にわたって初期化されるのを防ぐことができます。解決策:すべてのjQuery対応ハンドラーを遅延させる必要がないようにページを書き直してください。これは、安全に実行できる場合に遅延を必要とするコードのみを遅延ロードすることなどによって実現できます。 jQuery Migrateで使用される基本バージョンのjQueryに
jQuery.holdReady()
が含まれていない場合は、この警告が表示された直後にコードが失敗します。
この警告を回避するために、使用しないでください。
async: false
$ .ajax()呼び出しのいずれかで。これはXMLHttpRequestの唯一の非推奨機能です。
デフォルトは
async: true
@Webgrの部分的な答えは実際に私がこの警告@コンソールログをデバッグするのを助けました、その答えの他の部分が非常に多くの投票をもたらしました:(
とにかく、ここに私が私の場合この警告の原因が何であるか見つけた方法はあります:
私の場合、別のプラグインが2 .jsライブラリ を各ajax呼び出しの後にロードしていましたが、これは絶対に必要でも必要でもありませんでした。不正プラグインを無効にすると、ログから警告が削除されました。その時点から、自分で問題を解決するか(スクリプトの読み込みを特定のページまたはイベントに制限する - これはここでの回答には特定すぎる方法です)、解決するためにサードパーティのプラグイン開発者に連絡します。
これが誰かに役立つことを願っています。
私はすべての印象的な答えを見てきました。私は彼が彼に問題を与えているコードを提供するべきだと思います。以下の例で、page.phpのjqueryにリンクするスクリプトがあるとしたら、それがわかります。
$().ready(function () {
$.ajax({url: "page.php",
type: 'GET',
success: function (result) {
$("#page").html(result);
}});
});
次の場合にこのような警告が表示されます。
1)<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
を含むfile1。ページには入力フィールドがあります。入力フィールドに値を入力し、ボタンをクリックします。 Jqueryは、外部phpファイルに入力を送信します。
2)外部phpファイルにはjqueryも含まれ、外部phpファイルには<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
も含まれています。これは私が警告を受けたからです。
外部phpファイルから<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
を削除し、警告なしで動作します。
最初のファイル(file1)のロードについて理解しているので、jquery-1.10.2.js
をロードし、ページがリロードしない(jquery $.post
を使用して外部phpファイルにデータを送信する)ので、jquery-1.10.2.js
を続行します存在する。そのため、再度ロードする必要はありません。
press F12
F1
を押します。"Don't show chrome Data Saver warning"
-を参照してください。"Log XMLHTTPRequest"
- このチェックボックスも設定してください。楽しい
MVCアプリケーションでは、PartialView()ではなくView()を返すメソッドでKendo Windowを開いていたため、この警告が表示されました。 View()がページのすべてのスクリプトを再試行しようとしていました。
そして、私はこの例外を得ました。
{{>anotherScript}}
"example.com/files/text.txt"のようにクエリにURLを設定すると、この例外が発生しました。 IveはURLを " http://example.com/files/text.txt "に変更しましたが、この例外は消えました。
@Nycenのように私もCloudflareへのリンクのためにこのエラーを得ました。私のものは Select2 /プラグイン用でした。
それを修正するために、私はちょうど取り除きました
src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"
そしてエラーは消えました。
私はモーダルコンテンツを読み込もうとしていましたが、以前はレイアウトを無効にするのを忘れていました。
そう:
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
私の場合、これは Cloudflare が提供する "CDNJS Selections"アプリの一部である flexie スクリプトによって引き起こされました。
Cloudflareによると、「このアプリは2015年3月に廃止予定です」。私はそれを消して、メッセージは即座に消えました。
あなたは/を訪問することによってアプリにアクセスすることができます https://www.cloudflare.com/a/cloudflare-apps/yourdomain.com
注意:これは、このスレッドに対する私の答えのコピーです。 同期XMLHttpRequestの警告と<スクリプト> (解決策を探すときに両方を訪問しました)
これは私の場合は解決しました。
JS
$.ajaxPrefilter(function( options, original_Options, jqXHR ) {
options.async = true;
});
この回答はこのリンクに挿入されています
https://stackoverflow.com/questions/28322636/synchronous-xmlhttprequest-warning-and-script
私は以下の手順でこれを修正しました:
私にとって問題は、OKリクエストでは、ajaxレスポンスがテーブルなどの整形式のHTML文字列であることを期待していたことですが、この場合、サーバーはリクエストに問題を抱えてエラーページにリダイレクトしました。それでエラーページのHTMLコード(どこかに<script
タグがありました。私はコンソールにajaxレスポンスを記録しました。それが私が期待していたものではないことに気付いたのです)。
私の特定のケースでは、render layout: false
タグのすべてのスクリプトを含めて、レイアウト全体を再レンダリングしていた<head>
なしでRailsパーシャルをレンダリングしました。コントローラのアクションにrender layout: false
を追加することで問題は解決しました。
2014年に提起された質問は2019年なので、もっと良い選択肢を探すのは良いことだと思います。
Javascriptでfetch
apiを使用すると、より柔軟になります。
例えば、このコードを見てください
fetch('./api/some.json')
.then((response) => {
response.json().then((data) => {
...
});
})
.catch((err) => { ... });