jQuery ajax post Uncaught RangeError: Maximale Call-Stack-Größe überschritten
Lesezeit: 4 Minuten
Benutzer3609841
Ich habe ein Problem mit jQuery Ajax. Ich habe Javascript
<script type="text/javascript">
$(function() {
$('body').on("click", "#pager a", function(e) {
e.stopPropagation();
e.preventDefault();
var a = $(this);
var model = $('#searchForm').serialize();
$.ajax({
url: '/Product/Products',
type: 'POST',
data: {
model: model, page: a
},
success: function (data) {
alert('success');
$('#productsList').html(data);
}
});
});
});
</script>
Dieser Code erzeugt den Fehler “Uncaught RangeError: Maximale Aufrufstapelgröße überschritten” und ich verstehe nicht warum. Ich habe keinen Trigger, ich habe preventDefault und stopPropagation verwendet, aber ich habe immer noch diesen Fehler. Kann mir jemand helfen?
Es ist wirklich seltsam. Ich sehe überhaupt keinen Grund, warum dieser Code das erzeugen sollte. Hast du nicht irgendein anderer Code woanders?
– Jeremy Thille
17. Juni 2016 um 13:52 Uhr
Können Sie bitte Ihre Frage bearbeiten und Ihren HTML-Code hinzufügen? Um uns zu helfen, den Fehler zu reproduzieren.
– Iwan Gabriele
17. Juni 2016 um 13:52 Uhr
Du hast page: a als Teil der von Ihnen übermittelten Daten, wo a ist ein jQuery-Objekt – was erwarten Sie davon?
– nnnnn
17. Juni 2016 um 13:56 Uhr
Wie viele <a>‘s befinden sich auf der Seite (verschachtelt in #pager, das ist)? Poste deinen HTML-Code. #pager klingt wie ein Seitennummerierung von Arten. Wenn Sie zum Beispiel Tausende von haben Seiten in Ihrer Paginierungsanzeige (z. B. ?page=1, ?page=2, 50, 100, 1000), alle mit referenziert <div id="#pager"><a href="?page=2">...<a href="?page=10000"></div>und binden Sie dann den Click-Handler an ~x <a> Elemente könnten leicht den Stapel füllen.
– mferly
17. Juni 2016 um 14:23 Uhr
Dieser Fehler kann auch auftreten, wenn Sie etwas in Daten übergeben, das nicht in diesem Bereich definiert ist. Ein weiterer Grund ist die direkte Übergabe von Daten mit val().
Vielen Dank! Ich übergebe Daten direkt mit .val(), aber in einer Eigenschaft habe ich vergessen, .val() hinzuzufügen, Ihr Kommentar hat mir viel Zeit gespart!
– Sousuke
30. Juni 2017 um 16:33 Uhr
Vielen Dank, es war in der Tat für die .val()
– Lenin Zapata
27. August 2019 um 5:06 Uhr
übersehen .val() wenn Sie es eilig haben, Code zu entwickeln. Toller Fang.
– Zak
5. Februar 2020 um 18:17 Uhr
Anstatt var a = $(this) zu verwenden, um die Seite abzurufen, verwenden Sie ein verborgenes Feld und geben Sie dem Feld den Seitenwert.
Die musst du ausziehen var a = $(this);. Ich weiß nicht, was Sie dort erreichen wollen, aber die Verwendung eines von jQuery umschlossenen angeklickten Elements als Anforderungsdaten ist unsinnig.
“Verwenden des Ereigniskontexts (dargestellt durch this) als jQuery-Selektor” – Aber this ist nicht das Ereignis, es ist ein Verweis auf das Element, mit dem das Ereignis passiert ist.
– nnnnn
17. Juni 2016 um 13:57 Uhr
Ja, du bist wahr, mein Fehler. Aber immer noch zu versuchen, ein in jQuery verpacktes Element als Anforderungsdaten zu senden, ist seltsam.
– Iwan Gabriele
17. Juni 2016 um 14:00 Uhr
Es ist seltsam, zugegeben, aber das hat wahrscheinlich nichts mit dem zu tun maximum call stack Error.
– Jeremy Thille
17. Juni 2016 um 14:07 Uhr
Ich habe in einem getestet Codestift und anscheinend hast du recht. Aus irgendeinem Grund macht das Senden eines jQuery-Objekts in einem Ajax-Aufruf drunter und drüber. Wie auch immer, Sie haben auch Recht, wenn Sie sagen, dass das Senden eines ganzen jQuery-Objekts, wohin auch immer, keinen Sinn ergibt, weil es einfach keinen Sinn macht 🙂
– Jeremy Thille
17. Juni 2016 um 14:41 Uhr
Auch eine Endlosschleife kann diese Art von Fehler verursachen. Sehen Sie, dass Sie dieselbe Funktion nicht innerhalb einer Funktion aufrufen.
Ich bin auf ein solches Problem gestoßen, als ich ein großes Stück JSON mit jquery.tmpl.js analysiert habe. Dieser Fehler tritt auf, wenn große Arrays mit der Funktion concat() verarbeitet werden. Hier ein Link zum Problem: https://bugs.chromium.org/p/chromium/issues/detail?id=103583
Das Problem wurde seit 2011 nicht gelöst. Um es zu lösen, musste ich die Javascript-Bibliotheksdatei jquery-3.3.1.js bearbeiten. Für diejenigen, die diese Entscheidung wiederholen möchten, gehen Sie wie folgt vor: Suchen Sie die folgende Zeile in der Bibliotheksdatei return concat.apply ([], ret); und ersetzen Sie es durch den folgenden Code.
// Flatten any nested arrays
if ([].flat) return ret.flat();
var ret2 = [];
ret.forEach(function (i) {
if (i instanceof Array) {
i.forEach(function (i2) {
ret2.push(i2);
});
} else {
ret2.push(i);
}
});
return ret2;
// original code:
// return concat.apply([], ret);
// chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=103583
Wir prüfen, ob es eine flat()-Funktion im Arsenal des Browsers gibt, er hat zum Beispiel einen Chrome-Browser, und wenn es eine gibt – führen Sie einfach die Datenarrays zusammen – es wird nichts weiter benötigt. Wenn nicht, geht der Browser einen langsameren Weg, aber zumindest gibt es keinen Fehler.
Coskun Ozogul
Ich möchte meine Erfahrung teilen,
In meinem Fall war es nur ein falscher Parametername und genau die gleiche Fehlermeldung: Anstelle von confID habe ich die configID eingegeben und diesen Fehler erhalten.
function openNameEditor() {
var confID = $("#configStatusList").attr("data-id");
debugger;
$.ajax({
url: '@Url.Action("GetModelNameToChange", "Admin")',
type: "GET",
dataType: "HTML",
data: { configID: configID},//Here, instead of confID, I put configID which doesn't exist in the function.
success: function (response) {
$("#name-editor").html(response);
},
error: function (er) {
alert(er.error);
}
});
}
11454300cookie-checkjQuery ajax post Uncaught RangeError: Maximale Call-Stack-Größe überschrittenyes
Es ist wirklich seltsam. Ich sehe überhaupt keinen Grund, warum dieser Code das erzeugen sollte. Hast du nicht irgendein anderer Code woanders?
– Jeremy Thille
17. Juni 2016 um 13:52 Uhr
Können Sie bitte Ihre Frage bearbeiten und Ihren HTML-Code hinzufügen? Um uns zu helfen, den Fehler zu reproduzieren.
– Iwan Gabriele
17. Juni 2016 um 13:52 Uhr
Du hast
page: a
als Teil der von Ihnen übermittelten Daten, woa
ist ein jQuery-Objekt – was erwarten Sie davon?– nnnnn
17. Juni 2016 um 13:56 Uhr
Wie viele
<a>
‘s befinden sich auf der Seite (verschachtelt in#pager
, das ist)? Poste deinen HTML-Code.#pager
klingt wie ein Seitennummerierung von Arten. Wenn Sie zum Beispiel Tausende von haben Seiten in Ihrer Paginierungsanzeige (z. B. ?page=1, ?page=2, 50, 100, 1000), alle mit referenziert<div id="#pager"><a href="?page=2">...<a href="?page=10000"></div>
und binden Sie dann den Click-Handler an ~x<a>
Elemente könnten leicht den Stapel füllen.– mferly
17. Juni 2016 um 14:23 Uhr