从控制器返回后没有调用 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的主要内容,如果未能解决你的问题,请参考以下文章

Ajax Success 调用后无法更新 span 标签

CodeIgniter 从控制器返回数据

$.ajax()中的success和error的使用注意事项

ajax success不执行

AJAX请求成功,但是不进SUCCESS的问题

从通过 jQuery AJAX 调用的控制器返回 PDF