事情是这样的:我有一个 ajax 脚本,它向 API Controller 发送“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>
}
我也尝试过使用“async: 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");
}
}
此外,控制台中没有任何内容。没有错误消息,也没有应该从 console.log() 调用中出现的消息。
这是“网络”选项卡中显示的内容:
Here are the details about the 200 OK Response in network tab, on Firefox
最佳答案
jQuery documentation仅将这些列为 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;
});
(您可以使用 load
和 error
事件代替 readystatechange
;我从未尝试过使用 “删除”
所以...)
关于javascript - ASP.NET Core Ajax "done"、 "success"或 "error"未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48984461/