jQuery. AJAX 返回400错误请求

yqyhoc1h  于 2022-12-18  发布在  jQuery
关注(0)|答案(6)|浏览(183)

这样做效果很好:

jQuery('#my_get_related_keywords').click(function() {
    if (jQuery('#my_keyword').val() == '') return false;
        jQuery.getJSON("http://boss.yahooapis.com/ysearch/web/v1/"
        +jQuery('#my_keyword').val()+"?"
        +"appid=myAppID"
        +"&lang=en"
        +"&format=json"
        +"&count=50"
        +"&view=keyterms"
        +"&callback=?",
        function (data) {//do something}

这将返回400 Bad Request(只是使用. AJAX 重新制定上述jQuery以支持错误处理)。

jQuery('#my_get_related_keywords').click(function()
    {
    if (jQuery('#my_keyword').val() == '') return false; 
    jQuery('#my_loader').show();
    jQuery.ajax(
        {
        url: "http://boss.yahooapis.com/ysearch/web/v1/"
        +jQuery('#my_keyword').val()+"?"
        +"appid=myAppID"
        +"&lang=en"
        +"&format=json"
        +"&count=50"
        +"&view=keyterms"
        +"&callback=?", 
        success: function(data)
            {//do something}
iqxoj9l9

iqxoj9l91#

我认为您只需要再添加2个选项(contentTypedataType):

$('#my_get_related_keywords').click(function() {

    $.ajax({
            type: "POST",
            url: "HERE PUT THE PATH OF YOUR SERVICE OR PAGE",
            data: '{"HERE YOU CAN PUT DATA TO PASS AT THE SERVICE"}',
            contentType: "application/json; charset=utf-8", // this
            dataType: "json", // and this
            success: function (msg) {
               //do something
            },
            error: function (errormessage) {
                //do something else
            }
        });
}
66bbxpm5

66bbxpm52#

把这个添加到你 AJAX 调用中:

contentType: "application/json; charset=utf-8",
dataType: "json"
2sbarzqh

2sbarzqh3#

回答晚了,但我认为值得保持更新。扩展Andrea Turri的回答,以反映更新的jQuery API和.success/.error弃用方法。
从jQuery1.8.* 开始,首选的方法是使用.done()和.fail(). Jquery Docs
例如,在

$('#my_get_related_keywords').click(function() {

    var ajaxRequest = $.ajax({
        type: "POST",
        url: "HERE PUT THE PATH OF YOUR SERVICE OR PAGE",
        data: '{"HERE YOU CAN PUT DATA TO PASS AT THE SERVICE"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json"});

    //When the request successfully finished, execute passed in function
    ajaxRequest.done(function(msg){
           //do something
    });

    //When the request failed, execute the passed in function
    ajaxRequest.fail(function(jqXHR, status){
        //do something else
    });
});
pu82cl6c

pu82cl6c4#

例如,确保在调用$. AJAX 时使用“get”或“post”。

$.ajax({
    type: 'get',

必遇
应用程序.get('/',函数(请求,资源){
===============和员额

$.ajax({
    type: 'post',

必遇

app.post('/', function(req, res) {

m528fe3b

m528fe3b5#

我得到了400坏请求错误,即使在设置:

contentType: "application/json",
dataType: "json"

问题出在json对象中传递的属性类型, AJAX 请求对象中的data属性。
为了解决这个问题,我添加了一个错误处理程序,然后将错误记录到控制台。控制台日志将清楚地显示属性的验证错误(如果有)。
这是我最初的代码:

var data = {
    "TestId": testId,
    "PlayerId": parseInt(playerId),
    "Result": result
};

var url = document.location.protocol + "//" + document.location.host + "/api/tests"
$.ajax({
    url: url,
    method: "POST",
    contentType: "application/json",
    data: JSON.stringify(data), // issue with a property type in the data object
    dataType: "json",
    error: function (e) {
        console.log(e); // logging the error object to console
    },
    success: function () {
        console.log('Success saving test result');
    }
});

现在,在提出请求之后,我检查了浏览器开发工具中的控制台选项卡。
它看起来是这样的:

responseJSON.errors[0]清楚地显示了验证错误:* JSON值无法转换为System. String。路径:$.TestId*,这意味着在发出请求之前,我必须将TestId转换为数据对象中的字符串。
像下面这样更改数据对象创建为我解决了这个问题:

var data = {
        "TestId": String(testId), //converting testId to a string
        "PlayerId": parseInt(playerId),
        "Result": result
};


我假设其他可能的错误也可以通过记录和检查错误对象来识别。

ws51t4hk

ws51t4hk6#

您的AJAX调用未使用以下两个params完成。

contentType: "application/json; charset=utf-8",
dataType: "json"
  • contentType是要发送的数据类型
  • dataType是您期望从服务器返回的内容

另外尝试使用JSON.stringify()方法,它用于将javascript对象转换为json字符串。

相关问题