JQuery Ajax Post 导致 500 Internal Server Error

IT技术 javascript jquery ajax
2021-03-14 20:21:49

我正在尝试执行此 AJAX 帖子,但由于某种原因,我收到了服务器 500 错误。我可以看到它在控制器中击中了断点。所以问题似乎出在回调上。任何人?

$.ajax({
    type: "POST",
    url: "InlineNotes/Note.ashx?id=" + noteid,
    data: "{}",
    dataType: "json",

    success: function(data) {
        alert(data[1]);
    },
    error: function(data){
        alert("fail");
    }
});

这是应该返回的字符串:

{status:'200', text: 'Something'}
6个回答

我怀疑服务器方法在通过断点后抛出异常。使用 Firefox/Firebug 或 IE8 开发人员工具查看您从服务器获得的实际响应。如果出现异常,您将获得 YSOD html,它应该可以帮助您找出要查找的位置。

还有一件事——你的数据属性应该是 {} 而不是“{}”,前者是一个空对象,而后者是一个作为查询参数无效的字符串。更好的是,如果您不传递任何数据,只需将其忽略即可。

fiddler2.com对于查看来自服务器的实际响应也非常有用。
2021-05-06 20:21:49
:o Chrome 开发工具实际上有不足之处!
2021-05-10 20:21:49
您的第一句话具有误导性(暗示 500 错误发生在客户端)。在我更彻底地阅读答案之前,我几乎对你投了反对票。你可能想澄清一点。
2021-05-18 20:21:49
实际上你可以在 Chrome 中调试这个,查看这个答案以获取详细信息stackoverflow.com/a/21786593/14533
2021-05-20 20:21:49

如果有人使用 codeigniter 框架,则问题可能是由于启用了 csrf 保护配置引起的。

谢谢,在 Bonfire 中遇到了这个问题,并且对 CodeIgniter 的了解还不够深入,无法弄清楚这一点。
2021-04-20 20:21:49
几分钟前我刚遇到这个问题......你的回答给了我提示:) 其他人可能会避免这种情况 将它添加到数据中解决了这个问题: <?= $this->security->get_csrf_token_name() ? > : '<?= $this->security->get_csrf_hash() ?>'
2021-05-08 20:21:49

这是通过 Ajax 请求获取数据的 Ajax 请求简单代码

$.ajax({
    type: "POST",
    url: "InlineNotes/Note.ashx",
    data: '{"id":"' + noteid+'"}',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data) {
        alert(data.d);
    },
    error: function(data){
        alert("fail");
    }
});
contentType: "application/json; charset=utf-8", 我删除了这一行然后我的问题解决了
2021-04-25 20:21:49
如果你仍然使用那条线怎么办?@Taja_100
2021-04-25 20:21:49

我自己也遇到了这个问题,即使在我的情况下我找不到原因,但从 更改POST为 时GET,问题 500 错误消失了!

 type:'POST'
但不是真正的解决方案。有些东西必须是POST
2021-04-21 20:21:49
那是完全错误的。如果将 POST 更改为 GET 确实有效,那么您首先使用了不正确的 HTTPVerb。如果您必须使用 POST,因为例如您要发送有效负载,则必须使用 POST,而使用 GET 将不起作用。另一方面,如果你只是得到一些东西并且可以使用 GET,不要使用 POST,GET 会被缓存(有时取决于配置)
2021-05-06 20:21:49

我遇到了类似的复合错误,需要两种解决方案。就我而言,技术堆栈是 MVC/ASP.NET/IIS/JQuery。服务器端因 500 错误而失败,这是在控制器处理请求之前发生的,这使得服务器端的调试变得困难。

以下客户端调试使我能够确定服务器错误

在$.ajax错误回调中,向控制台显示错误详情

  error: (error) => {
                     console.log(JSON.stringify(error));
   }

这至少使我能够查看初始服务器错误

“JSON 请求太大,无法序列化”

这已在客户端 web.config 中解决

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

但是,请求仍然失败。但是这次出现了一个不同的错误,我现在可以在服务器端进行调试

“请求的实体太大”

这是通过将以下内容添加到服务 web.config 来解决的

<configuration>
…
 <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="524288">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"  />
        </binding>
      </basicHttpBinding>
    </bindings>

配置值可能需要进一步调整,但至少它解决了由 ajax post 引起的服务器错误。

我只是很困惑是否需要在服务器 web.config 或客户端的 web.config 上添加?另外请您解释一下这段代码是如何工作的,这将真正有帮助。我正在打印你在这里提到的日志,它说字符串的长度超过了 maxJson 长度属性的值集。
2021-05-02 20:21:49