我正在尝试执行此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'}
答案 0 :(得分:65)
我怀疑服务器方法在通过断点后抛出异常。使用Firefox / Firebug或IE8开发人员工具查看从服务器获得的实际响应。如果有异常,您将获得YSOD html,这可以帮助您找出要查看的位置。
还有一件事 - 您的数据属性应该是{}而不是“{}”,前者是空对象,而后者是作为查询参数无效的字符串。更好的是,如果你没有传递任何数据,就把它留下来。
答案 1 :(得分:29)
如果有人使用codeigniter框架,问题可能是由启用了csrf保护配置引起的。
答案 2 :(得分:18)
我自己也遇到过这个问题,即使我在我的情况下找不到它的原因,当从POST
更改为GET
时,问题500错误消失了!
type:'POST'
答案 3 :(得分:15)
这是通过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");
}
});
答案 4 :(得分:10)
答案 5 :(得分:8)
我今天碰到了同样的事情。如前所述,获取Firebug for Firefox,启用控制台并预览POST响应。这帮助我找出问题是多么愚蠢。我的行动是期望int类型的值,我发布了字符串。 (ASP.NET MVC2)
答案 6 :(得分:8)
我遇到了类似的复合错误,需要两个解决方案。在我的例子中,技术堆栈是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帖子导致的服务器错误。
答案 7 :(得分:6)
EventVwr中应该记录一个事件(来自asp.net的警告),它可以为您提供有关错误位置的更多详细信息。
答案 8 :(得分:4)
来自ASP.NET的500可能意味着在提供请求时在某个时刻抛出了未处理的异常。
我建议您将调试器附加到Web服务器进程(假设您有权访问)。
一个奇怪的事情:您向服务器发出POST请求,但是您没有传递任何数据(一切都在查询字符串中)。也许它应该是一个GET请求呢?
您还应该仔细检查网址是否正确。
答案 9 :(得分:3)
我今天刚遇到这个问题。有了这种错误,您将无法从服务器获得任何响应,因此,很难找到问题。
但是我可以告诉你“500内部服务器错误”是服务器而不是客户端的错误,你在服务器端脚本中出错了。通过关闭注释掉代码闭包并尝试再次运行它,你很快就会发现你错过了某个角色。
答案 10 :(得分:3)
如果您调用的功能以网络服务中的公共共享功能而非公共功能开头,您也可以在VB中获得该错误。 (如果您将某个功能移出或复制出课程,可能会发生这种情况)。另一件需要注意的事情。
答案 11 :(得分:2)
你能发布你应该接受这篇文章的方法的签名吗?
此外,我收到相同的错误消息,可能是出于其他原因。我的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
});
};
然后我的errorFunc javascript就是这样:
function(request, textStatus, errorThrown) {
$("#install").text("Error doing auto-installer search, proceed with ticket submission\n"
+request.statusText); }
使用IE我去了查看菜单 - &gt;脚本调试器 - &gt;在下一个声明中休息。
然后去触发将发布我的帖子的代码。这通常会让我深入jQuery的库中,而不是我想要的地方,因为选择下拉开启触发了jQuery。所以我点击了StepOver,然后实际的下一行也会中断,这就是我想要的地方。然后VS进入该页面的客户端(动态)模式,我在$("#install")
行中休息,这样我就可以看到(使用鼠标调试)请求中的内容,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>
所以检查所有这些,并发布您的控制器方法签名,以防这是问题的一部分
答案 12 :(得分:2)
我发现自己有这个错误。我在目录中配置了.htaccess重定向。好吧,它重新路由ajax调用tocourse($.post(../ajax.php)
),因此无法找到实际文件(导致500错误)。
我通过将ajax.php放在目录中来修复它(所以.htaccess
没有影响)。
答案 13 :(得分:2)
就我而言,这是一个简单的问题,但很难找到。 Page指令有错误的Inherits属性。它只需要包含顶级并且它可以工作。
代码错误
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="BusLogic"%>
更正代码
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="Web.BusLogic" %>
答案 14 :(得分:2)
我能够使用 Chrome 调试程序找到解决方案(我没有安装Firebug或其他第三方工具)
当我返回一个自我引用的值时,它向我显示我在服务器上遇到了问题。
答案 15 :(得分:1)
您传递给服务器的JSON数据应与您在客户端形成的名称相同。 例如:
var obj = { Id: $('#CompanyId').val(),
Name: $("#CompanyName").val()
};
$.Ajax(data: obj,
url: "home/InsertCompany".....
如果名称不同,例如:
[HttpPost]
public ActionResult InsertCompany(Int32 Id, string WrongName)
{
}
您将收到此错误。
如果您没有传递数据,请从AJAX请求中删除数据属性。
答案 16 :(得分:1)
对我来说,错误是在我发送请求的php文件中。 错误在于数据库连接。修复php代码后,错误已解决。
答案 17 :(得分:1)
我也遇到了同样的问题。以下是解决问题的两种方法 - 1.如果您正在使用某个框架,请确保您也发送带有ajax调用的CSRF令牌 以下是laravel -
的语法<meta name="_token" content="{{ csrf_token() }}">
在你的js文件中,确保在发送ajax调用之前调用它
$.ajaxSetup({
headers: {
'X_CSRF-TOKEN' : $('meta[name="_token"]').attr('content')
}
});
method
从post
更改为get
答案 18 :(得分:1)
如上所述,我认为您的返回字符串数据非常长。所以JSON格式已经损坏。
还有另外一种解决这个问题的方法。您应该以这种方式更改JSON数据的最大大小:
打开Web.Config文件并将这些行粘贴到配置部分
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
答案 19 :(得分:1)
我有这个问题,并发现服务器端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";
}
}
答案 20 :(得分:1)
我遇到了这个问题,因为我调用ajax post的页面有EnableViewState =“false”和EnableViewStateMac =“false”但不是被调用的页面。当我把它放在两个页面中时,一切都开始起作用。当我看到MAC地址异常时,我怀疑这一点。
答案 21 :(得分:1)
在启用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
答案 22 :(得分:1)
当我在jquery'on load'处理程序中执行两个ajax查询时,我发现这发生在chrome中,就像$(function(){$ .ajax()... $ .ajax()...}) ;
我使用以下方法避免使用:
setTimeout(function_to_do_2nd_ajax_request, 1);
它可能是一个chrome和/或jquery bug
答案 23 :(得分:0)
您的返回字符串数据可能很长。
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime maxRequestLength="2147483647" />
</system.web>
例如:
答案 24 :(得分:0)
在服务器端使用Try Catch块,并在catch块中将异常错误传回客户端。这应该会给你一个有用的错误信息。
答案 25 :(得分:0)
我遇到类似的AJAX代码问题,偶尔会返回“500内部服务器错误”。我通过增加“fastCGI”RequestTimeout和ActivityTimeout值来解决问题。
答案 26 :(得分:0)
您的代码包含dataType: json 。
在这种情况下,jQuery将响应评估为JSON并返回一个JavaScript对象。 JSON 数据是严格解析的。任何格式错误的 JSON 都会被拒绝,并引发解析错误。空响应也将被拒绝。
服务器应返回null
或{}
的响应。
答案 27 :(得分:0)
我对此很迟,但是我遇到了这个问题,据我了解,这是我的PHP代码出现错误(在我的情况下,是选择数据库的语法)。通常,此错误500是使用语法执行的操作-根据我的经验。换句话说:“ peopleware”问题! :D
答案 28 :(得分:0)
作为“格式错误的JSON”答案的补充,如果您正在运行的查询返回一个对象或任何阻止数据序列化的内容,您将收到此错误。您应该始终确保在操作方法的末尾具有JSON,并且只有JSON或从中获取数据的任何方法。
答案 29 :(得分:0)
通常,您的财产不完全正确或服务器处理出现问题。
答案 30 :(得分:0)
试试这个 标题:{ 'X-Requested-With': 'XMLHttpRequest' }, 在阿贾克斯中, 在 url 上方设置类型