JQuery Ajax Post导致500内部服务器错误

Nic*_*ick 75 javascript ajax jquery

我正在尝试执行此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");
    }
});
Run Code Online (Sandbox Code Playgroud)

这是应该返回的字符串:

{status:'200', text: 'Something'}
Run Code Online (Sandbox Code Playgroud)

tva*_*son 65

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

还有一件事 - 您的数据属性应该是{}而不是"{}",前者是空对象,而后者是作为查询参数无效的字符串.更好的是,如果您没有传递任何数据,请将其删除.

  • http://www.fiddler2.com/对于查看服务器的实际响应也非常有用. (4认同)
  • 您的第一句话具有误导性(暗示500错误发生在客户端)。在我更彻底地阅读答案之前,我几乎拒绝了您的投票。您可能需要澄清一下。 (2认同)

v1r*_*00z 31

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

  • 我刚刚在几分钟之前就遇到过这个问题...你的回答给了我提示:)也许有人为了避免这个问题而将其添加到数据中解决了这个问题:<?= $ this-> security-> get_csrf_token_name()? >:'<?= $ this-> security-> get_csrf_hash()?>' (7认同)

Sti*_*ian 18

我自己也遇到过这个问题,即使我在我的情况下找不到它的原因,当改变POSTGET,问题500错误消失了!

 type:'POST'
Run Code Online (Sandbox Code Playgroud)

  • 但不是真正的解决方案.有些事情必须是POST (8认同)
  • 那是完全错误的.如果将POST更改为GET实际上有效,那么您首先使用了错误的HTTPVerb.如果您必须使用POST,因为例如您正在发送有效负载,则必须使用POST并且使用GET将不起作用.而另一方面,如果你只是得到一些东西并且可以使用GET,不要使用POST,GET会被缓存(有时取决于配置) (2认同)

BTE*_*BTE 18

这是通过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");
    }
});
Run Code Online (Sandbox Code Playgroud)

  • contentType:“ application / json; charset = utf-8”,我删除了这一行,然后问题解决了 (3认同)

Tom*_*Tom 10

您可以在此处(或此处)查找HTTP状态代码,此错误告诉您:

"服务器遇到意外情况,无法满足请求."

您需要调试您的服务器.


Rob*_*nic 10

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

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

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

  error: (error) => {
                     console.log(JSON.stringify(error));
   }
Run Code Online (Sandbox Code Playgroud)

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

"JSON请求太大而无法序列化"

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

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
Run Code Online (Sandbox Code Playgroud)

但是,请求仍然失败.但这一次有一个不同的错误,我现在能够在服务器端调试

"请求的实体太大"

通过将以下内容添加到服务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>
Run Code Online (Sandbox Code Playgroud)

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


Art*_*ior 8

我今天碰到了同样的事情.如前所述,获取Firebug for Firefox,启用控制台并预览POST响应.这帮助我找出问题是多么愚蠢.我的行动是期望int类型的值,我发布了字符串.(ASP.NET MVC2)


Ram*_*esh 6

应该在EventVwr中记录一个事件(来自asp.net的警告),它可以为您提供有关错误可能位置的更多详细信息.


cod*_*ape 5

来自 ASP.NET 的 500 可能意味着在为请求提供服务时在某个时刻抛出了未处理的异常。

我建议您将调试器附加到 Web 服务器进程(假设您有权访问)。

一件奇怪的事情:您向服务器发出 POST 请求,但没有传递任何数据(所有内容都在查询字符串中)。也许它应该是一个 GET 请求?

您还应该仔细检查 URL 是否正确。


ang*_*iwi 5

我今天才面临这个问题。出现这种错误时,你不会从服务器得到任何响应,因此很难定位问题所在。

但我可以告诉你“500内部服务器错误”是服务器而不是客户端的错误,你在服务器端脚本中遇到错误。通过闭包注释掉代码闭包并尝试再次运行它,你很快就会发现你在某个地方漏掉了一个字符。