Ajax POST错误(400 BAD REQUEST)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax POST错误(400 BAD REQUEST)相关的知识,希望对你有一定的参考价值。

并提前感谢您的帮助。

我正在尝试创建一个POST,我在URL中传递TOKEN,我想传递另一个参数,这样我就可以将信息保存在数据库中。我有这个:

    $("#btnAddCompany").click(function(e) {
    var token = "123";
    var companyValue = document.getElementById("companyValue").value;
    var obj ={CompanyId: 4 ,Name: companyValue }
    var postData = JSON.stringify(obj);
    console.log(postData);
      $.ajax({  
        type: "POST", //REQUEST TYPE
        dataType: "json", //RESPONSE TYPE
        contentType: "application/json",
        data: postData,
        url: "http://banametric.ddns.net/BanaMetricWebServices/BanaSov_WS.svc/CompanySave/"+token, 
        success: function(data) {
            toastr.success("Lidl Adicionado!");
        },
        error: function(err) {
            console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
        }
    }).always(function(jqXHR, textStatus) {
        if (textStatus != "success") {
            alert("Error: " + jqXHR.statusText);
        }
    })
});

但是我收到400错误(错误请求)所以我认为我做错了,但我不知道是什么。错误跟踪是这样的:

请求中的AJAX错误:{“readyState”:4,“responseText”:“ r n

服务器遇到处理请求的错误。异常消息是'传入消息具有意外的消息格式'Raw'。操作的预期消息格式是'Xml','Json'。这可能是因为尚未在绑定上配置WebContentTypeMapper。请参阅服务器日志以获取更多详异常堆栈跟踪是:

在System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(消息消息,对象[]参数) r n at

答案

这是因为错误

操作的预期消息格式是'Xml','Json'。所以你可以在你的ajax调用中传递contentType

$.ajax({
 ....,

  contentType: "application/json"
})
另一答案

我不确定,但这取决于服务器想要从您那里读取的内容。

服务器不想读取原始字节,它需要xml或json

尝试添加标题

beforeSend: function(xhrObj){
    xhrObj.setRequestHeader("Content-Type","application/json");
    xhrObj.setRequestHeader("Accept","application/json");
},

在$ .ajax()函数中

另一答案

您需要在请求中设置内容类型标头,以通知服务器您将数据作为JSON发送。

错误消息告诉您服务器不理解您发送它的内容 - 您必须提示数据是否采用特定格式,特别是因为,再次如错误消息中所述,它允许您以多种不同的格式提交(在这种情况下为JSON或XML)。

添加

contentType: "application/json"

您的$ .ajax调用中的选项应解决此问题。

附:我们无法看到您的控制器方法的签名,但您可能还需要在JSON中为您的参数指定名称,例如像data: JSON.stringify({ "companyValue": postData });这样的东西,但是你的问题中没有足够的信息来确定正确的结构应该是什么。

另一答案
$("body").on("submit", ".example_form", function() {
$.ajax({
    url: 'http://example.com/{ROUTE_URL}',
    data: new FormData(this),
    processData: false,
    contentType: false,
    /* OR contentType: "application/json; charset=utf-8"*/
    type: 'POST',
    dataType: "json",
    success: function(data) {
        console.log(data);
    }
});

});

另一答案

而不是这个

 var postData = JSON.stringify(companyValue);

你为什么不试试这个:

var obj ={token :token ,companyValue:companyValue }

然后使用json stringify函数

 var postData = JSON.stringify(obj);

之后在ajax调用中只更改了url:

url: "http://webservice/CompanySave/"

以上是关于Ajax POST错误(400 BAD REQUEST)的主要内容,如果未能解决你的问题,请参考以下文章

在 Jmeter 的 Post 请求中出现 400 Bad Request 错误

AJAX请求返回HTTP 400 错误 - 请求无效 (Bad request)

Yii框架用ajax提交表单时候报错Bad Request (#400): Unable to verify your data submission.

AJAX请求返回HTTP 400 错误 - 请求无效 (Bad request)

Wordpress 在使用 fetch API 的 ajax 调用上返回 400 Bad Request

Python post 请求在请求库中引发 400 'Bad Request' 错误,但适用于 cURL