it-swarm.com.de

Ist es eine Grenze für POST Datengröße in Ajax?

Ich versuche, ein Array von Daten von meiner Seite an die MVC-Aktion mit jQuery Ajax zu senden. Hier ist mein jQuery-Code:

$('#btnSave').click(
  function () {
    result = [];
    $('#tblMatters tbody tr.mattersRow').each(function () {
      if (!($(this).hasClass('warning'))) {
        var item = {};
        if ($(this).find('td.qbmatter > div.dropdown').length > 0) {
          item.QBDescription = $(this).find('td.qbmatter > div.dropdown > a').text();
        } else {
          item.QBDescription = $(this).find('td.qbmatter').text();
        }
        var id = $(this).find("td:first > a").text();
        item.Narrative = $("#collapse" + id).find("div.scrollCell").text();
        item.WorkDate = $(this).find('td.workDate').text();
        item.Hours = $(this).find('td.hours').text();
        item.Person = $(this).find('td.person').text();
        if ($(this).find('td.rate > div.dropdown').length > 0) {
          item.Rate = $(this).find('td.rate > div.dropdown > a').text();
        } else {
          item.Rate = $(this).find('td.rate').text();
        }
        item.Amount = $(this).find('td.amount').text();
        result.Push(item);
      }
    });
    var originalRecords = $("#tblSummary tr.summaryTotalRow td.summaryOriginalRecords").text();
    var originalHours = $("#tblSummary tr.summaryTotalRow td.summaryOriginalHours").text();
    var excludedHours = $("#tblSummary tr.summaryTotalRow td.summaryExcludedHours").text();
    var totalHours = $("#tblSummary tr.summaryTotalRow td.summaryTotalHours").text();
    $.ajax({
      url: "/Home/SaveQBMatter",
      type: "POST",
      data: JSON.stringify({ 'Matters': result, 'originalRecords': originalRecords, 'originalHours': originalHours, 'excludedHours': excludedHours, 'totalHours': totalHours }),
      dataType: "json",
      traditional: true,
      contentType: "application/json; charset=utf-8",
      success: function (data) {
        if (data.status == "Success") {
          alert("Success!");
          var url = '@Url.Action("Index", "Home")';
          window.location.href = url;
        } else {
          alert("Error On the DB Level!");
        }
      },
      error: function () {
        alert("An error has occured!!!");
      }
    });
});

Lass mich etwas erklären. Ich habe eine HTML-Tabelle, die dynamisch erstellt wurde, und ich muss diese Daten in einer Datenbank speichern. In jQuery habe ich eine Schleife, die die Tabelle durchläuft, und ich speichere Daten jeder Zeile im result-Array. Dann übergebe ich diese Daten mit Ajax in MVC Action.

Und hier beginnt mein Problem ... Ich habe erkannt, dass es manchmal so läuft, wie es sein sollte, aber manchmal bekomme ich einen Fehler von Ajax alert("An error has occured!!!"); Nun habe ich verstanden, dass dieser Fehler auftritt, wenn mein Array result groß wird . Zum Beispiel: Wenn es 100-150 Elemente enthält> ist alles gut, aber wenn mehr als ~ 150 vorhanden sind> Fehler.

Gibt es in Ajax irgendein POST Limit? Wie kann ich es für beliebige Größen einrichten? Ich brauche diese Funktionalität wirklich! Hilfe bitte!

Mein ActionResult-Code:

public ActionResult SaveQBMatter(QBMatter[] Matters, string originalRecords, string originalHours, string excludedHours, string totalHours) {
  DBAccess dba = new DBAccess();
  int QBMatterID = 0;
  int exportedFileID = 0;
  foreach (QBMatter qb in Matters) {
    dba.InsertQBMatter(qb.QBDescription, qb.Narrative, qb.WorkDate, qb.Person, qb.Hours, qb.Rate, qb.Amount, ref QBMatterID);
  }
  ExcelTranslator translator = new ExcelTranslator();
  translator.CreateExcelFile("", Matters, originalRecords, originalHours, excludedHours, totalHours);
  return Json(new { status = "Success", message = "Passed" });
}

UPDATE: Lösung gefunden

JSON hat eine maximale Länge! Ich muss diesen Wert erhöhen. Fügen Sie in web.config Folgendes hinzu:

<appSettings>
  <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>
14
Bryuk

JSON hat eine maximale Länge! Ich muss diesen Wert erhöhen. Fügen Sie in web.config Folgendes hinzu:

<appSettings>
  <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>
21
Bryuk

Gibt es ein POST Limit in Ajax?

Nein, die HTTP-Spezifikation schreibt keine bestimmte Größenbeschränkung für Beiträge vor. Dies hängt jedoch davon ab, welchen Webserver Sie verwenden oder welche Programmiertechnologie zur Verarbeitung der Formularübermittlung verwendet wird.

In ASP.NET MVC können Sie Folgendes versuchen:

<system.webServer>
<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="1000000" />
    </requestFiltering>
</security>
3
Rahul Tripathi

Die HTTP-Spezifikation definiert keine Einschränkung der POST - Datengröße.

Wenn Sie jedoch ASP.NET MVC verwenden, könnte eine Datenbeschränkung POST sein. Versuchen Sie, diese in Ihrer Web.Config-Datei zu erhöhen:

<system.webServer>
<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="1000000" />
    </requestFiltering>
</security>

Von MSDN :

Gibt die maximale Länge des Inhalts in einer Anforderung in Byte an. Das Der Standardwert ist 30000000.

3
Yair Nevet

WENNgibt es ein clientseitiges Limit, dann wäre es browserspezifisch, aber die HTTP-Spezifikation definiert keine Beschränkung der POST - Datengröße.

Denken Sie daran, dass ein POST nur Bytes im Netzwerk ist. Je mehr Felder Sie veröffentlichen, desto länger dauert das Hochladen dieser Daten.

Eine 1 MB POST gibt dem Benutzer das Gefühl, dass das Formular beschädigt ist und nicht reagiert, wenn ein herkömmliches Formular verwendet wird.

Wenn serialize() viele Felder enthält, kann AJAX den Browser auflegen, während er alle Daten erfasst. Ich denke, Browser haben ein Speicherlimit für JavaScript insgesamt. Wenn Sie dieses Limit erreichen, schlägt der AJAX - Prozess fehl.

// wanna have some fun?
var html = '<div></div>';

for(var i = 0; i < 1000000; i++){
    html += html;
}

Am besten erhöhen Sie die maximal zulässige POST - Größe auf der Serverseite, um Probleme zu vermeiden.

Am häufigsten treten Probleme auf, wenn Leute ein Upload-Skript erstellen, das einfach zu hängen scheint, während der Benutzer verwirrt ist, warum seine 3 MB großen Bilder bei einem Upload-Link von 125 KB/s langsam werden.

1
MonkeyZeus

Das Limit wird durch einen Server 'max_post_size' oder eine ähnliche Bezeichnung festgelegt. Typische Standardservereinstellungen sind 2-8 MB in einem Beitrag.

Auf der Client-Seite hat nur GET eine maximale Grenze, die im Allgemeinen als 1500 Byte (minus 30-150 von Anforderungsheatern) betrachtet wird. Der Grund ist die MTU in der Netzwerkhardware mit niedrigerer Ebene

0
mschr

Das hat mein Problem gelöst:

<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization maxJsonLength="2147483647" />
        </webServices>
    </scripting>
</system.web.extensions>
0
Behnam