在Ajax Sucess Handler中处理JSON数据

时间:2015-05-19 04:56:14

标签: javascript ajax json asp.net-mvc

我想将一个复杂的对象从Controller Method传递回我的Ajax调用。据我所知,从几项研究中可以看出JSON是最佳选择。

这是我的控制器方法:

public JsonResult GetUserByData(string fn, string ln, string dep, string cc, string tel, string mail) {
        IList<Models.Person> userCollection = Models.Person.GetPersonsByData(fn, ln, dep, tel, cc, mail).ToList();
        if (userCollection.Count > 1) {
            return Json(new { Complex= true, HTML = PartialView("SomeView.cshtml", userCollection) });

        }
        else {
            return Json(new { Complex = false, HTML = PartialView("SomeOtherView.cshtml", userCollection.First()) });
        }

这是我的Ajax电话:

$.ajax({
            url: 'Home/GetUserByData',
            type: 'POST',
            dataType: 'html',
            data: {
                fn: firstname,
                ln: lastname,
                dep: department,
                cc: costcenter,
                tel: telephone,
                mail: mail
            },
            success: function (data) {
                if (data.Complex)
                    $('#Customer_Person').html(data.HTML);
                else
                    $('#Notification_Area').html(data.HTML);
            }
        });

回到我的脚本中,似乎属性&#34;复杂&#34;和&#34; HTML&#34;无法访问 - 我做错了什么?这是传递复杂对象的最佳方法还是有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

由于您将返回类型指定为HTML(dataType: 'html'),因此jQuery将响应视为字符串(而不是JSON),因此data.Complex不会评估任何内容。如果您尝试将数据解析为JSON,则可能会出错,因为HTML和JSON不能很好地协同工作。我建议先返回JSON,然后再调用HTML,或者只是在服务器上选择正确的模板,只发送HTML。

编辑:@Savaratkar是正确的,您还可以编码/转义HTML并通过JSON传递它。