5

我在局部剃须刀视图上使用 $ajax jquery 函数来获取另一个局部视图以及从控制器到页面的强类型模型数据-> 在特定 div 中显示。现在,如果数据模型数据在那里它可以工作,但如果没有模型数据,我将传递 json 响应,以便我可以检查剃刀视图以避免空异常。我的问题是 $ajax 中的 done 方法没有调用加 json 响应,我不知道我在哪里做错了

阿贾克斯函数

$(document).ready(function () {

    /*Address*/
    $.ajax({
        url: '@Url.Action("DisplayStudentAddress")',
        type: "GET",
        cache: false
    }).done(function (data, textStatus, jqXHR) {

        alert(data.Response);

       $('#studentAddressDisplay').html(data);

    }).fail(function (jqXHR, textStatus, errorThrown) {

        alert(jqXHR +"    "+textStatus+"    "+errorThrown);
    });
});

动作结果方法

 [HttpGet]
 [Authorize]
 public ActionResult DisplayStudentAddress()
    {
        int _studentEntityID = 0;

        _studentEntityID = _studentProfileServices.GetStudentIDByIdentityUserID(User.Identity.GetUserId());

        Address _studentAddressModel = new Address();

        _studentAddressModel = _studentProfileServices.GetStudentAddressByStudentID(_studentEntityID);


        if (_studentAddressModel != null)
        {
            return PartialView("DisplayStudentAddress_Partial", _studentAddressModel);
        }
        else
        {
             return Json(new { Response = "Provide Your Address Detail!" });
        }
    }
    #endregion

我检查了调试,在控制器中调用了 json,但它在 ajax 中警告错误

4

3 回答 3

3

如果您的服务器为 json 响应返回空字符串,jQuery 会将其视为失败。并且空字符串被认为是无效的 json。

根据官方文件here

从 1.9 开始,为 JSON 数据返回的空字符串被认为是格式错误的 JSON(因为它是);这现在将引发错误。

尝试下面的代码,而不是使用.always:-

$.ajax({
        url: '@Url.Action("DisplayStudentAddress")',
        type: "GET",
        cache: false
    }).always(function (data, textStatus, jqXHR) {

    alert(data.Response);

   $('#studentAddressDisplay').html(data);

}).fail(function (jqXHR, textStatus, errorThrown) {

        alert(jqXHR +"    "+textStatus+"    "+errorThrown);
    });

因为 。done仅当一切正常时才执行,因此如果出现错误.done将不会被调用。但是always无论您的 ajax 请求是否有效,该方法都会被触发。

于 2015-07-23T08:21:24.530 回答
0

正确答案在控制器动作方法中,修改如下;

 return Json(new { Response = "Provide Your Address Detail!", RecordStatus ="Not Available" }, JsonRequestBehavior.AllowGet);
于 2015-07-23T10:10:07.197 回答
0

为此更改代码:

 if (data.itemCount == 0) {
                        $('#row-' + data.deleteId).fadeOut('slow');
                    } else {
                        $('#item-count-' + data.deleteId).text(data.itemCount);
                    }

                    $('#cart-total').text(data.cartTotal);
                    $('#update-message').text(data.message);
                    $('#cart-status').text(data.cartCount);
于 2017-02-16T20:21:59.767 回答