Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax中的POST数据大小有限制吗?_Javascript_Jquery_Ajax_Asp.net Mvc - Fatal编程技术网

Javascript Ajax中的POST数据大小有限制吗?

Javascript Ajax中的POST数据大小有限制吗?,javascript,jquery,ajax,asp.net-mvc,Javascript,Jquery,Ajax,Asp.net Mvc,我试图使用jqueryajax将一组数据从我的页面发送到MVC操作。以下是我的jQuery代码: $('#btnSave').click( function () { result = []; $('#tblMatters tbody tr.mattersRow').each(function () { if (!($(this).hasClass('warning'))) { var item = {}; if ($(this).

我试图使用jqueryajax将一组数据从我的页面发送到MVC操作。以下是我的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!!!");
      }
    });
});
让我解释一下。我有一个动态构建的HTML表,我需要将这些数据存储到数据库中。在jQuery中,我有一个循环遍历表,并将每一行的数据存储在
结果
数组中。然后我使用Ajax将这些数据传递到MVC操作中

这就是我的问题开始的地方。。。我意识到有时候它会按它应该的那样运行,但是有时候我会从Ajax
alert(“发生了错误!!!”)中得到一个错误
现在我明白了,当我的
结果
数组变大时,会发生此错误。例如:如果它包含100-150项>一切都很好,但当有超过150项>错误时

在Ajax中有任何POST限制吗?我如何设置任何尺寸?我真的需要这个功能!请帮忙

我的操作结果代码:

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" });
}
更新:找到解决方案


JSON有一个最大长度!我需要增加这个值。在web.config中添加以下内容:

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

在Ajax中有任何POST限制吗

不,HTTP规范没有对POST施加特定的大小限制。但是,这取决于您使用的Web服务器或用于处理表单提交的编程技术

在ASP.NET MVC中,您可以尝试以下操作:

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

通过服务器的“最大发布大小”或类似命名设置限制。典型的默认服务器设置是一篇文章中的2-8MB


在客户端,只有GET有一个最大限制,通常认为是1500字节(从请求头减去30-150字节),原因是较低级别的网络硬件中的MTU,HTTP规范没有定义POST数据大小的限制

但是使用ASP.NET MVC时,可能存在POST数据限制,请尝试在Web.Config文件中增加该限制:

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

发件人:

指定请求中内容的最大长度(以字节为单位)。这个 默认值为30000000


如果存在客户端限制,那么它将是特定于浏览器的,但HTTP规范没有定义POST数据大小的限制

请记住,一篇文章只不过是网络上的字节数,因此你发布的字段越多,上传数据所需的时间就越长

如果使用传统的表单提交,1MB的帖子会让用户感觉表单已损坏且没有响应

如果有很多字段要序列化(),那么AJAX可以在收集所有数据时挂断浏览器。我认为浏览器对JavaScript总的来说是有内存限制的,所以如果达到这个限制,那么AJAX过程就会失败

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

for(var i = 0; i < 1000000; i++){
    html += html;
}
//想找点乐子吗?
var html='';
对于(变量i=0;i<1000000;i++){
html+=html;
}

最好的办法是增加服务器端允许的最大POST大小,以避免出现问题


最常见的问题是,当人们制作一个上传脚本时,它似乎挂起了,而用户却不明白为什么他们的3MB图片在125KB/s的上传链接上速度变慢。

JSON有一个最大长度!我需要增加这个值。在web.config中添加以下内容:

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

这解决了我的问题:

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


那么问题的原因是什么呢?@Bryuk:-实际上很难说出原因,因为可能有很多原因。我建议您使用任何调试器来检查实际的问题,但是按照标题行,POST in没有这样的限制Ajax@Bryuk:-我不知道这是否适用于你,但一旦我收到相同的POST 500内部服务器错误,并从POST更改为“为我工作”。你能试一下在你写的地方输入:'POST'我只是试着改变POST来获取,在这个例子中,我得到了Action=null中的所有数据……我花了很多时间在这上面并进行了研究,发现即使在web配置设置之后,如果存在问题,它可能不是json的实际长度,但是这个错误也涵盖了JSON嵌套对象长度达到的最大限制。这个错误的原因是其他的。使用firebug/使用visual studio断点来查看真正的问题是什么您将至少需要调试警报/dev toolguys中的返回代码。。请我仍然需要帮助!我发现了问题!如果这篇文章能帮助某人,任何人都会感谢@Bryuk你可以回答你自己的帖子。不管怎样,我遇到了一个错误,我甚至没有采取行动,所以这是100%的ajax…“你最好的办法是增加服务器端允许的最大帖子大小”-你能帮我做这个吗=)我真的需要这个…不幸的是,我是一个PHP开发人员,所以Yair Nevet或Rahul Tripathi的帖子是你最好的选择。老实说,我怀疑帖子的大小是你的问题。AJAX调用可能会有很多错误或格式错误。如果可能的话,我建议您发布
/Home/SaveQBMatter
页面上包含的代码,因为500错误是指服务器出现问题。如果您希望看到一个使用PHP的超级基本和全面的AJAX示例,请访问我的回答:它已经在我的web配置中,但当我将json数据传递给控制器。我正在传递超过600个长度的列表。已经有更大的值。它是2147483647,但仍然得到错误。