4

我正在从 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);
                });
            }
        });
    });

我有一个名为Customer的实体。

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

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

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

4

5 回答 5

5

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

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

尝试

$.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);
        }
于 2013-02-28T06:41:42.933 回答
1

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

于 2013-04-03T09:53:14.890 回答
1

更换你的线路

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

有了这个

contentType: "application/json",

并添加数据类型

datatype: 'json'
于 2013-02-28T06:45:41.937 回答
0

您在 ajax-success 函数中有一个对象列表作为列表。

解析它试试这个

$(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 模型的警报消息。我不知道你的模型中有什么属性。

于 2013-02-28T07:34:38.930 回答
-1

你的代码:

return Json(custList);

将其更改为:

return Json(new SelectList(custList));
于 2015-01-31T06:51:42.113 回答