成功和错误函数未在Ajax调用中触发
下面是一个Ajax调用我正在使用它来确定向用户显示哪些菜单选项(我知道这是一个有缺陷的方法,只是反对时间紧缩的演示)。 当页面加载时,我可以在Visual Studio中逐步执行控制器方法,因此我知道它正在触及控制器并发回正确的信息。
看看Chrome的网络控制台,我也可以看到浏览器收到了正确的响应。 但是, console.log
或alert
都没有触发。 success
或error
方法中的任何内容都不会执行。 有谁看到出了什么问题?
视图
$(document).ready(function ($) { //Determine which links to show in navbar window.onload = function () { $.ajax({ type: 'GET', url: '@Url.Action("CheckSecurity","Home")', dataType: 'json', succcess: function (data) { console.log(data); alert(data); if (data == "admin") { $('#adminLink').show(); } else if (data == "IT") { $('#ITLink').show(); } else if (data == "viewer") { $('#viewerLink').show(); } else if (data == "modifier") { $('#modifierLink').show(); } }, error: function (data) { alert("error"); } }); };
调节器
[HttpGet] public JsonResult CheckSecurity() { if (Security.IsAdmin(User)) return Json("admin", JsonRequestBehavior.AllowGet); if (Security.IsItSupport(User)) return Json("IT", JsonRequestBehavior.AllowGet); if (Security.IsViewer(User)) return Json("viewer", JsonRequestBehavior.AllowGet); if (Security.IsModifier(User)) return Json("modifier", JsonRequestBehavior.AllowGet); return Json("NA", JsonRequestBehavior.AllowGet); }
以下是Chrome中网络和常规控制台的几个屏幕截图。 麻烦来自于我逐步完成控制器方法并且程序已将值返回给浏览器。
网络控制台
标准控制台
你的额外有一个c
成功的情况下:
因此响应是200请求,但由于您no mapping for success
定义no mapping for success
,因此它永远不会被记录
这是成功而不是成功
NealR
弃用通知:
jq 1.8中将不推荐使用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调。 要准备最终删除的代码,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。
检查下面的完成,失败和始终回调。
$.ajax({ url: 'Your Url', data: JSON.stringify(Parameter list), type: 'POST', contentType: 'application/json, charset=utf-8', dataType: 'json', beforeSend: function (xhr, opts) { } }).done(function (data) { debugger; }).fail(function (data) { debugger; }).always(function(data) { alert("complete"); });
.ajax()。always(function(a,textStatus,b){});
替换jQuery 1.8中不推荐使用的方法.complete()。 响应成功的事务,参数与.done()相同(即a = data,b = jqXHR),对于失败的事务,参数与.fail()相同(即a = jqXHR,b = errorThrown)。 这是上面完整回调函数的替代构造。 有关实现细节,请参阅deferred.always() 。
$.ajax({ url: 'Your Url', data: JSON.stringify(Parameter list), type: 'POST', contentType: 'application/json, charset=utf-8', dataType: 'json', beforeSend: function (xhr, opts) { } }).always(function(data) { alert("complete"); });
.ajax()。done(function(data,textStatus,jqXHR){});
替换jQuery 1.8中不推荐使用的方法.success()。 这是上面成功回调函数的替代构造。 有关实现的详细信息,请参阅deferred.done() 。
$.ajax({ url: 'Your Url', data: JSON.stringify(Parameter list), type: 'POST', contentType: 'application/json, charset=utf-8', dataType: 'json', beforeSend: function (xhr, opts) { } }).done(function (data) { debugger; });
.ajax()。fail(function(jqXHR,textStatus,errorThrown){});
替换jQuery 1.8中不推荐使用的方法.error()。 这是上面完整回调函数的替代构造。 有关实现的详细信息,请参阅deferred.fail() 。
$.ajax({ url: 'Your Url', data: JSON.stringify(Parameter list), type: 'POST', contentType: 'application/json, charset=utf-8', dataType: 'json', beforeSend: function (xhr, opts) { } }).fail(function (data) { debugger; });