【问题标题】:Ajax call fails when passing Json over certain size传递超过一定大小的 Json 时,Ajax 调用失败
【发布时间】:2020-04-08 23:59:49
【问题描述】:

我有以下代码将 JSON 对象传递给 AJAX 调用...

  var jsonResultStr = $j("#HiddenLiveJson").val();
  var jsonResult = JSON.parse(jsonResultStr);

  var serviceURL = appRoot + 'Register/ImportTasks'

  $j.ajax({
   type: "get",
   url: serviceURL,
   data: { 'jsonResultsStr': jsonResultStr },
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   success: successFunc,
   error: errorFunc
  });

Json 来自 XLSX 文件,因此可能是任何大小。

如果传递了一个相对较小的 JSON 集,比如 JSON 中有 7 个项目,那么 AJAX 调用成功通过,控制器动作被命中,我的数据被导入。但是,如果传递了更大的 JSON 数据集,那么它会始终失败(HTTP 状态 400),甚至不会靠近控制器操作。我似乎无法在任何地方找到导致这种情况的任何建议。显然,我的第一个猜测是 XLSX 文件的大小。

顺便说一句...我的测试中使用的 JSON 应该是正确的,因为失败的数据与成功的数据相同,但复制到两倍大小。

到目前为止,我已经尝试过 将此添加到我的 web.config:

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

这也是 web.config 中的 appSettings:

<add key="aspnet:MaxJsonDeserializerMembers" value="1500000000" />

并且还设置以下内容:

<httpRuntime maxRequestLength="1000000000" .../>

这些都没有任何区别。 任何更多的建议都非常欢迎!

【问题讨论】:

    标签: json ajax model-view-controller


    【解决方案1】:

    您需要对大型 JSON 对象使用 POST 请求,并将 JSON 数据字符串化,其中 contentType 为“application/json”,dataType 为“json”。 将 ajax 调用中的“数据”参数替换为: 数据:JSON.stringify(jsonResult)

    还在服务器大小脚本中使用 get POST 方法捕获客户端数据。 希望这会有所帮助:)

    【讨论】:

    • 谢谢...不知道为什么它是一个 GET 开始,但这让我走上了正确的轨道!
    猜你喜欢
    • 2015-08-14
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多