Jquery Ajax调用不会进入成功处理程序
下面是一个让我陷入困境的场景: 我拥有的 返回Json的MVC ActionResult: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
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,