【问题标题】:Ajax Success function not calling after returning from Controller ? MVC从控制器返回后没有调用 Ajax Success 函数? MVC
【发布时间】:2023-03-26 02:18:02
【问题描述】:

我的 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 代码中断。
  • 是的,它的工作原理

标签: jquery json ajax asp.net-mvc


【解决方案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);
    }
});
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多