javascript - ASP.NET Core Ajax "done"、 "success"或 "error"未触发

标签 javascript ajax asp.net-core asp.net-ajax

事情是这样的:我有一个 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;
});

(您可以使用 loaderror 事件代替 readystatechange;我从未尝试过使用 “删除” 所以...)

关于javascript - ASP.NET Core Ajax "done"、 "success"或 "error"未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48984461/

相关文章:

jquery - 使用 Rails 3 和 jQuery 进行 Ajax - 从 JS 调用

asp.net-core - 使用空路由指定可选格式扩展名

asp.net-core - 在 .Net Core API 中使用 Dapper 选择计数 (*) 查询返回不正确的值

javascript - 使用 Google Analytics 跟踪 iframe 内的点击

javascript - 了解道场 Hook

javascript - CSS/HTML - 使固定 div 占据屏幕的 20%,另一个可滚动

Jquery 表单插件在 IE 8 中不起作用

javascript - XHR 状态 0,本地主机上的就绪状态 1

javascript - Casperjs 单击无法打开 'download csv' 操作系统窗口

c# - OnCertificateValidated 未运行 - 自签名证书客户端身份验证 - ASP.NET Core 和 Kestrel