簡體   English   中英

ASP.NET Core Ajax“完成”,“成功”或“錯誤”未觸發

[英]ASP.NET Core Ajax “done”, “success” or “error” not firing

事情是這樣的:我有一個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()調用中出現的消息。

這是“網絡”標簽中顯示的內容:

以下是有關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"這樣的操作,所以...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM