jQuery ajax post Uncaught RangeError: Maximale Call-Stack-Größe überschritten

Lesezeit: 4 Minuten

Benutzer-Avatar
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.

<input type="hidden" value="xyzpage" id="pageValue">

var pageVal = $("#pageValue").val();

data: {
         model: model, page:pageVal 
      },

Dies wird das Problem lösen, denke ich

Benutzer-Avatar
Iwan Gabriele

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.

Benutzer-Avatar
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);
        }
    });

}

1145430cookie-checkjQuery ajax post Uncaught RangeError: Maximale Call-Stack-Größe überschritten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy