【问题标题】:Getting a 500 internal server error when using Jquery ajax post method使用 Jquery ajax post 方法时出现 500 内部服务器错误
【发布时间】:2013-06-14 12:39:57
【问题描述】:

帮助!在我们的生产环境中使用 jquery ajax post 方法时,我收到 500 内部服务器错误。我以前遇到过这个问题,但一直无法解决。当时,我刚决定将“POST”方法更改为“GET”……这很奏效。但现在更重要的是我能够使用 jquery ajax post 方法。这只是一个简单的 ajax 后调用,但由于某种原因,它在生产环境中内部崩溃了。

这是一个使用 Windows 2008 服务器和 IIS7 的网络农场。

这就是我正在做的。

$.ajax({
    type: "POST",
    url: url,
    data: data,
    success: success,
    dataType: dataType
 });

【问题讨论】:

  • 您需要调试服务器代码或至少在此处发布带有错误消息的服务器日志。
  • 您必须查看服务器日志 - 错误 500 表示服务器端出现问题,因此这是最好的起点。我们肯定无法从您提供的代码中对此进行调试。
  • 请求是正确的,你的问题是服务器端的。使用fiddler2.com 之类的软件检查服务器答案,这有助于理解此类问题。例如,它可能是 PHP 中使用的未声明变量。
  • 服务器端必须支持您请求的 URL 上的 POST 请求。当服务器给出错误时,它可能不会。因此向服务器询问详细信息可能会有所帮助。
  • 你应该提供一些关于你的服务器环境的基本信息:PHP?阿帕奇? IIS? ASP.NET MVC?这是什么?

标签: jquery ajax post


【解决方案1】:

编辑:除非你在 LAMP 上,否则几乎没用 .. 抱歉,伙计

通常 apache 将当天的日志存储在 /var/log/apache2/error_log.1 中(可能缺少 .1 只需执行 ls -l | head )

这是假设您使用的是 LAMP。

对于 SSL 错误添加 ssl_

【讨论】:

  • 这可能对 OP 有帮助,但它是评论而不是对他的问题的回答。
  • 没问题,我脸皮厚。我更新了我的帖子。这是一个使用带有 IIS7 的 Windows 2008 服务器的网络农场。我没有提到事件日志,因为它们被完全锁定了,而且有很多繁文缛节只是为了找到它们。我希望有人可能已经遇到了这个问题并找到了解决方案。
  • 500 是检查引擎灯的数字等价物。除非您在场或有诊断工具,否则很难真正知道。
【解决方案2】:

您遇到问题的只是一段代码还是“所有” POST 方法?您可以尝试下面的“测试”模板代码来验证 POST 是否适用于非常基本的服务器端方法。您的错误是服务器端的,所以这是为了验证某些东西是否可以在服务器端工作。如果这个非常基本的代码不起作用,它可以缩小问题是否是您的服务器端方法,或者可能是服务器配置。在添加更复杂的方法之前,我使用这样的代码来验证我是否可以发布。此外,请使用Fiddler 真正了解发生了什么,因为它可以为您提供有关错误的更多详细信息。

无论您的服务器端代码在哪里:

[WebMethod]
public string TestMethod(string test)
{
    return "I received the argument: " + test;
}

您的客户端,使用较新版本的 JQuery:

<script>
$(function() {  
    var testVal = "this is a test string";
    $.ajax({
        type: "POST",
        contentType: "application/json",
        data: "{'test':'" + testVal + "'}",
        url: "code.asmx/TestMethod",
        beforeSend: function() {}
    }).done(function(data) {

        alert(data.d);

    }).always(function() {

    }).fail(function(jqXHR, textStatus, errorThrown) {
        alert('Error: ' + errorThrown);
    })
});
</script>

并且可能需要在您的 web.config 中

<configuration>
    <system.web>
    <webServices>
        <protocols>
            <add name="HttpPost"/>
        </protocols>
    </webServices>
    </system.web>
</configuration>

【讨论】:

    【解决方案3】:

    如果你调用的是服务器端的web方法,请验证参数的名称是否与数据声明的名称相同。

    例如:

    [WebMethod()]
    public static bool MyMethod(string myData)
    {... }
    

    客户端:

    $.ajax({
        type: "POST",
        contentType: "application/json",
        data: "{'myData':'" + testVal + "'}",
        url: "code.asmx/TestMethod",
        beforeSend: function() {}
    }).
    

    【讨论】: