ASP.NET 核心阿贾克斯"done","success"或"error"不发射



事情是这样的:我有一个ajax脚本,它向API控制器发送"DELETE"请求,我想删除的东西确实从数据库中删除了,API返回200 OK响应,但没有事件会触发,我真的不知道为什么。

这是名为 的脚本:

@section Scripts{
<script type="text/javascript">
$(document).ready(function () {
$('.delete-project').click(function (e) {
$.ajax({
url: '/api/project/' + id,
method: 'DELETE',
async: true,
dataType: 'text',
success: function () {
console.log("Success reached");
}
}).done(function () {
alert("done");
console.log("done");
}).error(function () {
console.log("failed");
});
return false;
});
});
</script>
}

我也尝试过使用"异步:false",但不幸的是,它没有解决我的问题。

(另外,返回 false 是因为我正在单击嵌入在可点击列表中的按钮,这是为了防止在单击按钮后被重定向,就像您单击了列表中的其他任何地方一样。在我得到任何问题之前,我想指出这一点)

这是 API 执行的代码

// DELETE api/<controller>/5
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int id)
{
var project = await _unitOfWork.Projects.GetById(id);
if (project == null)
throw new HttpRequestException();
else { 
await _unitOfWork.Projects.Delete(project);
await _unitOfWork.SaveChangesAsync();
return Ok("Ok");
}
}

此外,控制台中没有任何内容。控制台.log() 调用中没有错误消息和不应显示的消息。

这是"网络"选项卡中显示的内容:

以下是有关 Firefox 上网络选项卡中 200 OK 响应的详细信息

jQuery 文档仅将这些列为method参数的有效值:"GET""POST""PUT"

听起来如果你想做一个"DELETE",你会想直接使用XMLHttpRequest而不是。这是相当微不足道的:

$('.delete-project').click(function (e) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
console.log("Succeeded");
} else {
console.log("Failed");
}
}
};
xhr.open("DELETE", "/api/project/" + id);
xhr.send();
return false;
});

(您可以使用loaderror事件而不是readystatechange;我从来没有用"DELETE"尝试过它们...

最新更新