ASP.NET核心Ajax“完成”,“成功”或“错误”未触发

时间:2018-02-26 08:45:00

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

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

我也试过“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

1 个答案:

答案 0 :(得分:1)

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

听起来你想要直接使用XMLHttpRequest,如果你想做"DELETE"。这很简单:

$('.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",所以...)