【问题标题】:Jquery Ajax's success function not called未调用 Jquery Ajax 成功函数
【发布时间】:2013-02-14 06:20:03
【问题描述】:

我正在从 Jquery ajax 调用 MVC 控制器方法。

$(document).ready(function () {
        $.ajax({
            type: "POST",
            url: "/Customer/GetDetails",
            contentType: "application/json; charset=utf-8",
            async: false,
            cache: false,
            success: function (data) {
                $.each(data, function (index, value) {
                    alert(value);
                });
            }
        });
    });

我有一个名为客户的实体。

控制器方法从数据库中获取记录并存储为客户列表,并以 JsonResult 类型返回该列表。

public JsonResult GetDetails()
{
    CustomerDAL customer = new CustomerDAL();
    IList<Customer> custList = customer.GetDetail();
    return Json(custList);
}

但是这里根本没有调用我的ajax的success函数。

【问题讨论】:

  • 添加这个:dataType:'json',
  • 是浏览器错误消息。调试它并得到什么是错误?
  • cache:false 仅适用于 GET 和 HEAD 请求。检查 HERE 获取所有 ajax 参数属性。
  • 我没有收到任何消息
  • 您是否在控制器方法中放置了一个断点并查看是否首先调用了actionresult?也正如@AliRiza 所说,使用 firebug 或 chrome 工具查看是否有任何错误

标签: c# javascript jquery asp.net-mvc


【解决方案1】:

您不必指定content-type,因为它设置了服务器期望数据的类型,您没有发送任何数据,因此无需显式设置,其次将dataType 设置为@987654323 @ 这是客户端期望来自服务器的数据的格式。但我真的怀疑这可能是任何错误的原因。

添加错误回调以确保在返回的路上出现问题,例如

试试

$.ajax({
            type: "POST",
            url: "/Customer/GetDetails",
            dataType:'json',
            async: false,//WHY??
            cache: false,
            success: function (data) {
                 alert("success");                
            },
            error:function(){
              alert("something went wrong");
            }
        });

使用

  1. Firebug 或 chrome 工具检查 ajax 请求并设置返回的状态码。

  2. 在 Controller 中放置断点,查看调用时是否命中了ActionResult

编辑

HttpPost 注释标记你的 JsonResult

[HttpPost]
public JsonResult GetDetails()
        {
            CustomerDAL customer = new CustomerDAL();
            IList<Customer> custList = customer.GetDetail();
            return Json(custList);
        }

【讨论】:

  • 我试过你的样品。它击中了错误。 typeof(console) 在这里未定义。
  • 请再试一次我已经编辑了答案...看看错误回调中的警报是否出现...如果您在此处获取控制台类型未定义,那么可能正在调用成功处理程序因为在错误函数中我检查了未定义的控制台
  • 对不起.. typeof(console) 在这里不是“未定义”。收到消息 OOOps
  • 返回的状态码是 500。抛出的错误是“Internal Server error”
  • 添加[HttpPost]注解也无法解决问题
【解决方案2】:

今天进入了。问题是,“成功”事件没有被触发,从 jQuery 的角度来看,实际上没有“成功”:服务器返回的 json 代码格式错误! 所以:仔细检查您的 json 格式,即使用 http://zaach.github.com/jsonlint/ 的 JSON Lint 或其他内容。 ajax 函数对任何错误/错误的设置都非常“宽容”,但格式错误的 json 代码绝对是一个错误。只要错误事件被触发,就会有错误发生。

【讨论】:

    【解决方案3】:

    更换你的线路

     contentType: "application/json; charset=utf-8",
    

    有了这个

    contentType: "application/json",
    

    并添加数据类型

    datatype: 'json'
    

    【讨论】:

    • 你应该使用异步为真。这将使服务器等待
    • @Syeda 你是对的,async:false 杀死了 ajax 的目的,但这仍然不是问题的原因
    • 再确认两件事。将调试添加到 GetDetails 是否真的去那里并在成功后发出警报,然后再调用每个是否弹出警报?
    • GetDetails() 被调用。那是肯定的。在ajax方法中,它只是跳过ajax函数并退出函数。
    【解决方案4】:

    你有一个对象列表作为 ajax-success 函数中的 List。

    解析它试试这个

    $(document).ready(function () {
        $.ajax({
            type: "POST",
            url: "/Customer/GetDetails", // or better way '@Url.Action("GetDetails", "Customer")'
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                $.each(data, function (index, customer) {
                    alert(customer.id, customer.name, customer.surname);
                });
            }
        });
    });
    

    控制器

    public JsonResult GetDetails()
    {
        CustomerDAL customer = new CustomerDAL();
        IList<Customer> custList = customer.GetDetail();
    
        return Json(custList);
    }
    

    例如假设您的 CustomerDAL 模型

    class CustomerDAL
    { 
        public int id { get; set; }
        public string name { get; set; }
        public string surname { get; set; }
    }
    

    为您的 CustomerDAL 模型修改警报消息。我不知道你的模型有什么属性。

    【讨论】:

      【解决方案5】:

      您的代码:

      return Json(custList);
      

      改成:

      return Json(new SelectList(custList));
      

      【讨论】:

        猜你喜欢
        • 2013-08-04
        • 2015-01-15
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 1970-01-01
        相关资源
        最近更新 更多