Jquery Ajax调用不会进入成功处理程序

Jquery Ajax调用不会进入成功处理程序,jquery,ajax,Jquery,Ajax,下面是一个让我陷入困境的场景: 我拥有的 返回Json的MVC ActionResult: public ActionResult GetUpdates(string productId) { var updatesForProduct = _repository.GetUpdates(productId); if (updatesForProduct.Count != 0) { return Json( new

下面是一个让我陷入困境的场景:

我拥有的

返回Json的MVC ActionResult:

public ActionResult GetUpdates(string productId)
{
    var updatesForProduct = _repository.GetUpdates(productId);

    if (updatesForProduct.Count != 0)
    {
        return Json(
                     new
                     {
                         UpdatedData = updatesForProduct.Select(x => new[] 
                        { 
                           x.UpdatedDate.ToString(),
                           x.NewLabel
                        })
                     }, JsonRequestBehavior.AllowGet);
    }

    return Json(new { success = true });
}
JS部分:

function GetProductUpdate() {

    var urlToGetProductUpdate = "/Products/GetUpdates/"

    var request = $.ajax({
        async: false,
        url: urlToGetProductUpdate,
        method: "GET",
        data: { productId: productId},
        dataType: "JSON"
    });

    request.done(function (result) {
        if (result.success) {
            console.log(result);
        }
        else {
            alert("Not able to get Updates!");
        }

    });

    request.fail(function (jqXHR, textStatus) {
        console.log(textStatus);
        alert("Request failed.");
    });
}
发生了什么:

我可以在调试器中看到,对存储库的调用返回一个更新列表,在JS中,它确实进入了.done承诺,但在内部,它将进入警报部分,而不是我预期的成功部分

我做错了什么

提前感谢。

试试这个:

request.success(function (result) {
    console.log(result.success);        
});

在ajax定义中定义成功和失败的函数:

var request = $.ajax({
    async: false,
    url: urlToGetProductUpdate,
    method: "GET",
    data: { productId: productId},
    dataType: "JSON",
    success: function (data, status, jqxhr)
    {
        \\logging
    },
    error: function (jqxhr, status, errotMsg)
    {
        \\ alert
    }
});

当更新发生时,您不会在JSON中返回success属性,只有在您不更新任何内容时才会返回。 如果将console.log(结果)放在“完成”的开头:

不应找到success属性,只应找到作为JSON发送的结果:

{UpdateDate:[{UpdateDate:“…”,NewLabel:“…”}]}

您可能应该在JSON结果中有一个属性,以便控制器操作如下所示:

public ActionResult GetUpdates(string productId)
{
    var updatesForProduct = _repository.GetUpdates(productId);

    if (updatesForProduct.Count > 0)
    {
        return Json(new { success = true, updatedData = 
            updatesForProduct.Select(x => new[] 
                { 
                    x.UpdatedDate.ToString(),
                    x.NewLabel
                })
             }, JsonRequestBehavior.AllowGet);
    }

    return Json(new { success = false }); //not sure if this should be true or false in your case
}
旁注:

您应该删除

async: false,
因为您正在使用延迟

async: false,