jQuery Ajax Post меняет структуру объекта

Сегодня я впервые работаю с Ajax и столкнулся со странной проблемой. Используя jQuery для выполнения запроса POST Ajax, он создает странный синтаксис. Я не нашел ответа на этот вопрос в других вопросах, на самом деле, я также не знаю, что мне нужно искать.

С Почтальоном я использовал это как тело моего запроса POST:

{
    "name": "t.bchuaer@test.de",
    "automaticDelete": false,
    "cc": {
        "ccFolder": false,
        "smartDelete": false,
        "deletionDays": 182
    },
    "filters": [
    {
        "id": 0,
        "active": false
    }
    ]  
}

Когда я использую GET чтобы получить объекты (без Ajax), он возвращает именно это. Тем не менее, когда я использую POST с Ajax и получить его через то же самое GET метод, как и другие объекты, я получаю это:

{
    "name": "test@tester.com",
    "automaticDelete": "false",
    "cc[ccFolder]": "false",
    "cc[smartDelete]": "false",
    "cc[deletionDays]": "182",
    "id": 4
}

Мой код jQuery выглядит так:

var emailAccount = {
        "name": emailAddress.val(),
        "automaticDelete": false,
        "cc": {
            "ccFolder": false,
            "smartDelete": false,
            "deletionDays": 182
        },
        "filters": []
    };

    $.ajax({
        type: 'POST',
        url: basicUrl + 'emails',
        data: emailAccount,
        success: function() {
        ...
        },
        error: function() {
        ...
        }
    });

Что я пробовал до сих пор:

  • с помощью dataType: "json"
  • с помощью contentType: 'application/json' (приводит к ошибке 500 от json-сервера)

Итак, мой вопрос: что это?

"cc[ccFolder]": "false",
"cc[smartDelete]": "false",
"cc[deletionDays]": "182"

И почему Ajax создает это так?

Я получаю доступ к коду, как это:

function getData(path, followUp, id) {
    var dataRequest = new XMLHttpRequest();
    dataRequest.open('GET', basicUrl + path);

    dataRequest.onload = function() {
        var receivedData = JSON.parse(dataRequest.responseText)
        gotEmails(receivedData)
    };

    dataRequest.send();
}

function gotEmails(data) {
    for (i = 0; i < data.length; i++) {
        var userEmailAccount = {
            id: data[i].id,
            name: data[i].name,
            automaticDelete: data[i].automaticDelete,
            cc: data[i].cc,
            filters: []
        };

        if (data[i].filters != 'undefined') {
            var filterQuery = queryBuilder("filters?", data[i].filters);
            getData(filterQuery, 9, data[i].id);
        }
    }
}

1 ответ

Решение

Я нашел рабочее решение с помощью:

var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
xmlhttp.open("POST", basicUrl + 'emails');
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.send(JSON.stringify(emailAccount));

вместо того, чтобы использовать AJAX.

Другие вопросы по тегам