JQuery Ajax Post导致500内部服务器错误
我正在尝试执行此AJAX职位,但出于某种原因,我得到一个服务器500错误。 我可以看到它在控制器中达到了中断点。 所以问题似乎在callback。 任何人?
$.ajax({ type: "POST", url: "InlineNotes/Note.ashx?id=" + noteid, data: "{}", dataType: "json", success: function(data) { alert(data[1]); }, error: function(data){ alert("fail"); } });
这是应该返回的string:
{status:'200', text: 'Something'}
我怀疑服务器方法传递断点后抛出一个exception。 使用Firefox / Firebug或IE8开发人员工具查看从服务器获得的实际响应。 如果出现exception,您将得到YSOD html,这应该可以帮助您找出在哪里寻找。
还有一件事 – 你的数据属性应该是{}不是“{}”,前者是一个空对象,而后者是一个作为查询参数无效的string。 更好的是,如果你没有传递任何数据,就放弃它。
如果有人使用codeigniter框架,问题可能是由csrf保护configuration启用引起的。
我自己只是有这个问题,即使我找不到原因,在我的情况下,从POST
更改为GET
,问题500错误消失!
type:'POST'
这是通过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"); } });
你可以在这里 (或这里 )查找HTTP状态码,这个错误告诉你:
“服务器遇到了一个意外情况,导致无法完成请求。”
你需要debugging你的服务器。
今天我遇到了同样的事情。 正如以前build议得到Firefox的Firebug,启用控制台和预览POST响应。 这帮助我发现问题是多么的愚蠢。 我的行动正在期待inttypes的值,我正在张贴string。 (ASP.NET MVC2)
EventVwr中应该有一个事件(来自asp.net的警告),它可以为您提供有关错误的详细信息。
来自ASP.NET的500可能意味着在处理请求时某个时候抛出了未处理的exception。
我build议你在Web服务器进程中附加一个debugging器(假设你有权访问)。
一件奇怪的事情是:你向服务器发出一个POST请求,但是你不传递任何数据(一切都在查询string中)。 也许它应该是一个GET请求呢?
您还应该仔细检查URL是否正确。
我今天才面对这个问题。 有了这样的错误,你不会得到服务器的任何回应,因此,很难find问题。
但是我可以告诉你“500内部服务器错误”与服务器不是客户端错误,你在服务器端脚本中出现错误。 通过closures注释掉代码封闭,并尝试再次运行它,你很快就会发现你错过了某个angular色。
你也可以在VB中得到这个错误,如果你正在调用的函数开始于公共共享function而不是web服务中的公共function 。 (如果您将该function移出或复制出课程,可能会发生这种情况)。 还有一件事要注意。
我遇到了类似的复合错误,这需要两个解决scheme。 在我的情况下,技术堆栈是MVC / ASP.NET / IIS / JQuery。 服务器端发生了500错误,这是在控制器处理请求之前发生的,使得服务器端的debugging变得困难。
以下客户端debugging使我能够确定服务器错误
在$ .ajax错误callback中,将错误详细信息显示到控制台
error: (error) => { console.log(JSON.stringify(error)); }
至less,这使我能够查看最初的服务器错误
“JSON请求太大,无法序列化”
这已经在客户端web.config中解决了
<appSettings> <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
但是,请求仍然失败。 但是这一次有一个不同的错误,我现在可以在服务器端进行debugging
“请求的实体太大”
通过将以下内容添加到服务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>
configuration值可能需要进一步的调整,但至less可以解决由ajax引起的服务器错误。
你可以发布你的方法的签名应该接受这个职位?
此外,我得到相同的错误信息,可能是由于不同的原因。 我的YSOD谈到了字典不包含不可空值的值。 我得到YSOD信息的方法是在处理错误返回的$ .ajax函数中放置一个断点,如下所示:
<script type="text/javascript" language="javascript"> function SubmitAjax(url, message, successFunc, errorFunc) { $.ajax({ type:'POST', url:url, data:message, contentType: 'application/json; charset=utf-8', dataType: 'json', success:successFunc, error:errorFunc }); };
然后我的错误functionJavaScript是这样的:
function(request, textStatus, errorThrown) { $("#install").text("Error doing auto-installer search, proceed with ticket submission\n" +request.statusText); }
使用IE我去查看菜单 – >脚本debugging器 – >在下一个语句中断。 然后去触发将启动我的post的代码。 这通常把我带到了jQuery库的深处,而不是我想要的地方,因为select下拉菜单触发了jQuery。 所以我打StepOver,然后下一行也会打破,这是我想成为的地方。 然后VS进入该页面的客户端(dynamic)模式,并在$("#install")
行中放置一个中断,以便我可以看到(使用鼠标debugging)请求中的内容textStatus errorThrown。 请求。 在request.ResponseText中有一个html消息,我看到:
<title>The parameters dictionary contains a null entry for parameter 'appId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ContentResult CheckForInstaller(Int32)' in 'HLIT_TicketingMVC.Controllers.TicketController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.<br>Parameter name: parameters</title>
所以检查所有这些,并发布您的控制器方法签名,以防万一这是问题的一部分
我发现自己有这个错误。 我有一个目录中configuration的.htaccessredirect。 那么它重新路由ajax调用ofcourse( $.post(../ajax.php)
),所以它找不到实际的文件(导致500错误)。
我通过将ajax.php放在一个目录中来“修复”它(所以.htaccess
不会影响)。
在我的情况下,这是一个简单的问题,但很难find。 页指令有错误inheritance属性。 它只需要包括顶级,它的工作。
错误代码
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="BusLogic"%>
正确的代码
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="Web.BusLogic" %>
我发现这发生在chrome中,当我在jquery的“加载”处理程序中做了两个ajax查询,就像$(function(){$ .ajax()… $ .ajax()…});
我避免使用:
setTimeout(function_to_do_2nd_ajax_request, 1);
这大概是一个铬和/或jQuery的错误
在启用CSRF保护的情况下使用CodeIgniter框架时,请在每个可能发生ajax POST的页面中加载以下脚本:
$(function(){ $.ajaxSetup({ data: { <?php echo $this->config->item('csrf_token_name'); ?>: $.cookie('<?php echo $this->config->item('csrf_cookie_name'); ?>') } }); });
需要:jQuery和jQuery.cookie插件
来源: https : //stackoverflow.com/a/7154317/2539869和http://jerel.co/blog/2012/03/a-simple-solution-to-codeigniter-csrf-protection-and-ajax
我有这个问题,因为我调用AJAXpost的页面有EnableViewState =“false”和EnableViewStateMac =“false”,但不是页面调用。 当我把这两个页面都开始工作。 当我看到MAC地址exception时,我怀疑这一点。
您传递给服务器的JSON数据应该与您在客户端形成的名称相同。 例如:
var obj = { Id: $('#CompanyId').val(), Name: $("#CompanyName").val() }; $.Ajax(data: obj, url: "home/InsertCompany".....
如果名称不同,例如:
[HttpPost] public ActionResult InsertCompany(Int32 Id, string WrongName) { }
你会得到这个错误。
如果您没有传递数据,请从AJAX请求中删除数据属性。
我能够使用Chromedebugging器find解决scheme(我没有安装Firebug或其他第三方工具)
- 转到开发人员选项卡(CTRL + MAJ + I)
- networking >点击失败的请求,在红色> 预览
它告诉我,当我返回一个自引用的值时,服务器上出现了问题。
我有这个问题,发现服务器端的C#方法应该是静态的 。
客户端:
$.ajax({ type: "POST", url: "Default.aspx/ListItem_Selected", data: "{}", dataType: "json", contentType: "application/json; charset=utf-8", success: ListItemElectionSuccess, error: ListItemElectionError }); function ListItemElectionSuccess(data) { alert([data.d]); } function ListItemElectionError(data) { }
服务器端:
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public static String ListItem_Selected() { return "server responce"; } }
我也面临同样的问题。 下面是我已经解决它的两种方法 – 1.如果您使用的是一个框架,请确保您正在发送一个CSRF标记与ajax调用以下是语法将如何看起来像laravel –
<meta name="_token" content="{{ csrf_token() }}">
在你的js文件中,确保在发送ajax调用之前调用它
$.ajaxSetup({ headers: { 'X_CSRF-TOKEN' : $('meta[name="_token"]').attr('content') } });
- 解决这个问题的另一种方法是将
method
从post
改为get
您的返回string数据可能会很长。
<system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime maxRequestLength="2147483647" /> </system.web>
例如:
- 1个字节= 1个字节
- 5字符= 5字节
- “Hakki”= 5字节
而她是我的版本:
$.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(jqXHR, textStatus, errorThrown){ alert('Error: '+ errorThrown); } });
如上所述,我认为你的返回string数据非常长。 所以JSON格式已经损坏。
还有其他的方法来解决这个问题。 您应该以这种方式更改JSON数据的最大大小:
打开Web.Config文件并将这些行粘贴到configuration部分
<system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="50000000"/> </webServices> </scripting> </system.web.extensions>
在您的服务器端使用Try Catch块,并在catch块中将exception错误传回客户端。 这应该会给你一个有用的错误信息。
我有类似的问题与AJAX代码偶尔返回“500内部服务器错误”。 我通过增加“fastCGI”RequestTimeout和ActivityTimeout值来解决问题。
在我的情况下,这个问题是由数据库表(重复条目)中的完整性约束违反引起的。
我有类似的问题。 在我的情况下,我有我的部分观点的错误。 当我解决他们时,问题就消失了。