Ajax POST 请求 - 400 错误请求 - 格式不正确的语法

Posted

技术标签:

【中文标题】Ajax POST 请求 - 400 错误请求 - 格式不正确的语法【英文标题】:Ajax POST Request - 400 Bad Request - Incorrectly Formatted Syntax 【发布时间】:2021-12-11 03:37:03 【问题描述】:

我正在 MVC Web 应用程序中进行开发,我正在努力创建从网格中删除数据的功能。简而言之,我目前正在为显示的表格中的每一行呈现一个编辑和删除按钮,单击删除按钮将调用下面的delete 函数。该函数构造并打开一个Bootstrap modal,显示一条确认消息和两个按钮,一个用于确认删除过程,另一个用于取消和关闭该modal。然后我在delete 按钮上开发了一个click 事件,理论上应该完成对DeleteRecord 控制器的DeleteRecord 方法的Ajax POST 请求。问题涉及请求的响应,该响应似乎总是返回400 - Bad Request,我认为这是由于语法格式不正确,但在我的测试中我无法解决这个问题。

我之前已将方法更改为 GET 而不是 POST,它正确到达目标方法并返回状态码 200,在我的研究中,我还注意到JSON.stringify() 的使用以及我的控制器方法期望的事实string/int 参数,而我相信我正在发送一个复合对象。我尝试了以下代码的变体,但没有成功。

删除函数(从网格调用):

function delete(id, entityObject, masterRecordEntityObject) 
    var dialogTitle;
    dialogTitle = "Delete Item?";

    var data = "<div class='modal-header'>";
    data += "<h4 class='modal-title'>" + dialogTitle + "</h4>";
    data += "<button type='button' class='close' data-dismiss='modal' aria-label='Close'>";
    data += "<span aria-hidden='true'>&times;</span>";
    data += "</button>";
    data += "</div>";
    data += "<div class='modal-body'>";
    data += "<p><i class='fas fa-exclamation-triangle' style='float:left; margin:4px 7px 20px 0;'></i> Please click delete to confirm deletion.</p>";
    data += "</div>";
    data += "<div class='modal-footer'>";
    data += "<a class='btn btn-danger' id='btnConfirmDelete'>Delete</a>";
    data += "<button class='btn btn-primary' type='button' data-dismiss='modal'>Cancel</button>";
    data += "</div>";

    $('#myModalContent').html(data);
    $('#myModal').modal('show');


点击事件:

$("#btnConfirmDelete").click(function () 
    $.ajax(
        url: '@Url.Action("DeleteRecord", "DynamicGrid")',
        type: 'POST',
        data: 
            "recordId": id,
            "entityObject": entityObject,
            "masterRecordEntityObject": masterRecordEntityObject
        ,
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        async: true,
        error: function (xhr) 
            alert('Error: ' + xhr.statusText);
        ,  
        success: function (result) 
            alert(result);
        ,
    );
);

DeleteRecord 方法(DynamicGridController):

[HttpPost]
public Task<IActionResult> DeleteRecord(int recordId, string entityObject, string masterRecordEntityObject)

    // Code
    return Content("OK");

任何帮助将不胜感激。

编辑:

这里的请求是来自开发者控制台的控制台/网络信息。

网络:

控制台:

【问题讨论】:

请检查控制台和网络选项卡(按 F12 或右键单击并选择检查元素)错误,如果没有收到该错误,请分享。 @MalvikBhavsar - 请查看添加的屏幕截图。谢谢 参考this link 【参考方案1】:

您的 ajax 无法向操作发送任何参数,这可能会导致 400 错误。

尝试从您的 ajax 中删除此代码

 contentType: 'application/json; charset=utf-8' 

【讨论】:

以上是关于Ajax POST 请求 - 400 错误请求 - 格式不正确的语法的主要内容,如果未能解决你的问题,请参考以下文章

Ajax POST 请求 - 400 错误请求 - 格式不正确的语法

AJAX POST 上的 JSON Stringify 400 错误请求

错误 400 错误请求 AJAX (WCF)

spring跨域 post 400 错误的请求怎么解决

web前端 ajax请求报415/400错

ajax post请求报错415或400解决方案