【问题标题】:ASP.NET Core Ajax "done", "success" or "error" not firingASP.NET Core Ajax“完成”、“成功”或“错误”未触发
【发布时间】:2018-08-05 16:05:59
【问题描述】:

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

【问题讨论】:

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


    【解决方案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" 所以...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多