Est-ce une limite pour la taille des données POST dans Ajax?
Je suis en train d'envoyer un tableau de données à partir de ma page à la MVC Action à l'aide d'Ajax de jQuery. Voici mon code jQuery:
$('#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!!!");
}
});
});
Permettez-moi d'expliquer un peu. J'ai un tableau HTML qui a été construit de manière dynamique et j'ai besoin de stocker ces données dans une base de données. En jQuery, j'ai une boucle en passant par la table et je stocker des données de chaque ligne dans la result
tableau. Puis-je transmettre ces données à l'aide d'Ajax en MVC Action.
Et c'est là que mon problème commence... je me suis rendu compte que parfois, il va comme il se doit, mais parfois, j'obtiens une erreur de l'Ajax alert("An error has occured!!!");
Maintenant, j'ai compris que cette erreur se produit lorsque mon result
tableau devient grand. Par exemple: Si elle contient de 100 à 150 objets > tout est bon, mais quand il y a plus de ~150 > Erreur.
Est-il un POST limite en Ajax? Comment puis-je mettre en place pour toutes les tailles? J'ai vraiment besoin de cette fonctionnalité! Toute aide, s'il vous plaît!
Mon 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" });
}
Mise à JOUR: Trouvé une solution
JSON a une longueur maximum! J'ai besoin d'augmenter cette valeur. Dans le web.config ajouter les éléments suivants:
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>
source d'informationauteur Bryuk | 2013-11-27
Vous devez vous connecter pour publier un commentaire.
JSON a une longueur maximum! J'ai besoin d'augmenter cette valeur. Dans le web.config ajouter les éléments suivants:
Non, la spécification HTTP, n'impose pas de taille limite pour les messages. Mais il dépend sur le Serveur Web que vous utilisez, ou la technologie de programmation utilisé pour traiter le formulaire de soumission.
Dans ASP.NET MVC, vous pouvez essayer ceci:
La spécification HTTP n'est pas la définition d'une limitation de la POSTE de la taille des données.
Mais à l'aide de ASP.NET MVC, il y pourrait être un POST limite de données, essayez d'augmenter votre site Web.Fichier de configuration:
De MSDN:
SI il y a un côté client limite, alors il serait navigateur spécifique, mais la spécification HTTP ne permet pas de définir une limitation de la POSTE de la taille des données.
Garder à l'esprit qu'un POST est simplement octets sur le réseau de sorte que le plus de champs que vous envoyez ensuite le plus qu'il peut prendre pour télécharger les données.
Un 1MB POST va faire l'utilisateur l'impression que la forme est cassé, et ne répond pas si l'aide d'une forme traditionnelle soumettre.
Si il y a beaucoup de champs de
serialize()
puis AJAX pourrait raccrocher le navigateur alors qu'il recueille toutes les données. Je pense que les navigateurs ont une limite de mémoire pour JavaScript global donc, si vous frappez qui limite l'AJAX processus échouera.Votre meilleur pari est d'augmenter la limite maximale de la taille de message sur le serveur-côté pour éviter les problèmes.
Plus souvent des problèmes surviennent quand les gens font un script d'upload qui semble s'accrocher pendant que l'utilisateur est confondu pourquoi leur 3MO images vont lent sur un 125KB/s lien de téléchargement.
La limite est définie par le biais d'un serveur max_post_size " ou similaire de nommage. Par défaut les paramètres du serveur de 2 à 8 MO en un seul poste.
Sur le côté client, OBTENEZ seulement a une limite maximale, généralement considéré comme 1500 octets (moins 30-150 à partir des en-têtes de requête) et la raison est la MTU dans le plus bas niveau du matériel réseau