Direct Web Remoting (DWR) JavaScript ライブラリ ファイルを使用していますが、Safari (デスクトップおよび iPad) でのみエラーが発生します。
それは言う
最大呼び出しスタック サイズを超えました。
このエラーは正確には何を意味し、処理が完全に停止しますか?
Safari
また、ブラウザの修正(実際にはiPad Safari
、それは言う
JS:実行がタイムアウトを超えました
これは同じコール スタックの問題であると想定しています)
Direct Web Remoting (DWR) JavaScript ライブラリ ファイルを使用していますが、Safari (デスクトップおよび iPad) でのみエラーが発生します。
それは言う
最大呼び出しスタック サイズを超えました。
このエラーは正確には何を意味し、処理が完全に停止しますか?
Safari
また、ブラウザの修正(実際にはiPad Safari
、それは言う
JS:実行がタイムアウトを超えました
これは同じコール スタックの問題であると想定しています)
これは、コードのどこかで、コール スタックの制限に達するまで、別の関数を呼び出す関数を呼び出していることを意味します。
これはほとんどの場合、基本ケースが満たされていない再帰関数が原因です。
このコードを検討してください...
(function a() {
a();
})();
いくつかの呼び出しの後のスタックは次のとおりです...
ご覧のとおり、コール スタックは制限に達するまで増加します。つまり、ブラウザーのハードコードされたスタック サイズまたはメモリの枯渇です。
それを修正するには、再帰関数に満たすことができる基本ケースがあることを確認してください...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
同じ JavaScript ファイルを誤って 2 回インポート/埋め込みした場合に、これが発生することがあります。インスペクターの [リソース] タブで確認する価値があります。
私の場合、値の代わりに入力要素を送信していました。
$.post( '',{ registerName: $('#registerName') } )
それ以外の:
$.post( '',{ registerName: $('#registerName').val() } )
これにより、Chromeタブがフリーズし、ページが応答しなくなったときの「待機/強制終了」ダイアログさえ表示されませんでした...
コードのどこかに再帰ループがあります(つまり、スタックがいっぱいになるまで、最終的に何度も何度も呼び出す関数)。
他のブラウザは、スタックが大きいか(代わりにタイムアウトが発生します)、何らかの理由でエラーを飲み込んでしまいます(try-catchの配置が不適切な場合があります)。
エラーが発生した場合は、デバッガーを使用して呼び出しスタックを確認してください。
何らかの理由で無限のプロセス/再帰を実行する必要がある場合は、別のスレッドでWebworkerを使用できます。 http://www.html5rocks.com/en/tutorials/workers/basics/
dom要素を操作して再描画する場合は、アニメーション http://creativejs.com/resources/requestanimationframe/を使用してください。
Chrome dev ツールバー コンソールでエラーの詳細を確認してください。これにより、コール スタック内の関数が表示され、エラーの原因となっている再帰へと導かれます。
私の場合、2 つの jQuery モーダルが重なり合って表示されていました。それを防ぐことで私の問題は解決しました。
私も同様の問題に直面しました ここでは、ドロップダウンロゴアップロードボックスを使用してロゴをアップロードするときの詳細です
<div>
<div class="uploader greyLogoBox" id="uploader" flex="64" onclick="$('#filePhoto').click()">
<img id="imageBox" src="{{ $ctrl.companyLogoUrl }}" alt=""/>
<input type="file" name="userprofile_picture" id="filePhoto" ngf-select="$ctrl.createUploadLogoRequest()"/>
<md-icon ng-if="!$ctrl.isLogoPresent" class="upload-icon" md-font-set="material-icons">cloud_upload</md-icon>
<div ng-if="!$ctrl.isLogoPresent" class="text">Drag and drop a file here, or click to upload</div>
</div>
<script type="text/javascript">
var imageLoader = document.getElementById('filePhoto');
imageLoader.addEventListener('change', handleImage, false);
function handleImage(e) {
var reader = new FileReader();
reader.onload = function (event) {
$('.uploader img').attr('src',event.target.result);
}
reader.readAsDataURL(e.target.files[0]);
}
</script>
</div>
CSS.css
.uploader {
position:relative;
overflow:hidden;
height:100px;
max-width: 75%;
margin: auto;
text-align: center;
img{
max-width: 464px;
max-height: 100px;
z-index:1;
border:none;
}
.drag-drop-zone {
background: rgba(0, 0, 0, 0.04);
border: 1px solid rgba(0, 0, 0, 0.12);
padding: 32px;
}
}
.uploader img{
max-width: 464px;
max-height: 100px;
z-index:1;
border:none;
}
.greyLogoBox {
width: 100%;
background: #EBEBEB;
border: 1px solid #D7D7D7;
text-align: center;
height: 100px;
padding-top: 22px;
box-sizing: border-box;
}
#filePhoto{
position:absolute;
width:464px;
height:100px;
left:0;
top:0;
z-index:2;
opacity:0;
cursor:pointer;
}
修正前の私のコードは次のとおりです。
function handleImage(e) {
var reader = new FileReader();
reader.onload = function (event) {
onclick="$('#filePhoto').click()"
$('.uploader img').attr('src',event.target.result);
}
reader.readAsDataURL(e.target.files[0]);
}
コンソールのエラー:
onclick="$('#filePhoto').click()"
divタグから削除することで解決しました。
同じ問題に直面していましたが、ajax で 2 回使用されたフィールド名を削除することで解決しました。
jQuery.ajax({
url : '/search-result',
data : {
searchField : searchField,
searchFieldValue : searchField,
nid : nid,
indexName : indexName,
indexType : indexType
},
.....
私の場合の問題は、親と同じパスを持つ子ルートがあるためです。
const routes: Routes = [
{
path: '',
component: HomeComponent,
children: [
{ path: '', redirectTo: 'home', pathMatch: 'prefix' },
{ path: 'home', loadChildren: './home.module#HomeModule' },
]
}
];
そのため、子供ルートの行を削除する必要がありました
const routes: Routes = [
{
path: '',
component: HomeComponent,
children: [
{ path: 'home', loadChildren: './home.module#HomeModule' },
]
}
];
私の場合、誤って同じ変数名を割り当ててしまい、val 関数 "class_routine_id" に
var class_routine_id = $("#class_routine_id").val(class_routine_id);
次のようにする必要があります:
var class_routine_id = $("#class_routine_id").val();
同じ名前の 2 つの JS 関数があったため、このエラーが発生しました