从控制器返回后没有调用 Ajax Success 函数? MVC
Posted
技术标签:
【中文标题】从控制器返回后没有调用 Ajax Success 函数? MVC【英文标题】:Ajax Success function not calling after returning from Controller ? MVC 【发布时间】:2020-07-17 06:49:57 【问题描述】:我的 jQuery 代码如下所示:
$("#create").click(function(e)
var myModel =
"TribeName": $('#TribeName').val()
;
var jsonToPost = JSON.stringify(myModel);
$.ajax(
url: '/Home/Create/',
async: true,
processData: false,
data: jsonToPost,
type: 'post',
contentType: 'application/json; charset=utf-8',
success: function (data)
if (data)
alert('asd');
$('#butn').trigger('click');
,
error: function (err)
if (!$('.modal-header').hasClass('alert-danger'))
$('.modal-header').removeClass('alert-success').addClass('alert-danger');
$('.delete-confirm').css('display', 'none');
$('.success-message').html(err.statusText);
);
)
这是我的控制器:
public ActionResult Create(Tribe model)
try
using (StructureEntities db = new StructureEntities())
var tribe = db.Set<Tribe>();
tribe.Add(new Tribe TribeName = model.TribeName );
//db.Tribes.Add(model);
db.SaveChanges();
return Json(true, JsonRequestBehavior.AllowGet);
catch(Exception ex)
return Json(new success = false, message = ex.Message , JsonRequestBehavior.AllowGet);
// return RedirectToAction("NewsCreated", model);
我把它输入 get 我正在返回成功方法,但由于类型我无法将我的数据发送到控制器。
在上面的 ajax 中,我可以发送和保存我的数据,但无法返回 ajax 的成功方法
在发布这个问题之前我搜索了很多
希望您的建议
【问题讨论】:
它也没有遇到错误。我尝试删除 if 子句,即使它没有触发警报 确认:使用您提供的代码(类型:发布并保存数据)可以正常调用您的 MVC 操作,只是没有返回到 js? 您能否尝试data==true
或签入控制台日志,但在某些情况下,控制器操作发生错误,您的 jquery 代码中断。
是的,它的工作原理
【参考方案1】:
因为 true 不以 bool 形式返回,它以字符串形式返回 你的代码应该像
if (data=="True")
alert('asd');
$('#butn').trigger('click');
【讨论】:
除了,当然,它不是检查真,而是检查真。if ("True") alert("yep")
你的代码会失败,因为它是 "True" which != "true"
@TareqHajer 我试过你的代码伙伴它没有成功的方法:(
@Doc 你能解释一下这是如何回答你的问题的吗?不会重回成功:有或没有if
【参考方案2】:
你可以试试这个
1) 为泛型使用创建一个模型类
public class AjaxActionResult
public string Message get; set;
public bool Success get; set;
public object Data get; set;
//In your action
public ActionResult Create(Tribe model)
try
using (StructureEntities db = new StructureEntities())
var tribe = db.Set<Tribe>();
tribe.Add(new Tribe TribeName = model.TribeName );
//db.Tribes.Add(model);
db.SaveChanges();
return Json(new AjaxActionResult()
Message = "Your message",
Success = true
);
catch(Exception ex)
return Json(new AjaxActionResult()
Message = ex.Message,
Success = false,
Data = ex
);
在jquery中,你需要改变如下
$("#create").click(function(e)
var myModel =
"TribeName": $('#TribeName').val()
;
var jsonToPost = JSON.stringify(myModel);
$.ajax(
url: '/Home/Create/',
async: true,
processData: false,
data: jsonToPost,
type: 'post',
contentType: 'application/json; charset=utf-8',
success: function (data)
if (data.Success)
alert('asd');
$('#butn').trigger('click');
,
error: function (err)
if (!$('.modal-header').hasClass('alert-danger'))
$('.modal-header').removeClass('alert-success').addClass('alert-danger');
$('.delete-confirm').css('display', 'none');
$('.success-message').html(err.statusText);
);
)
【讨论】:
以上是关于从控制器返回后没有调用 Ajax Success 函数? MVC的主要内容,如果未能解决你的问题,请参考以下文章