jquery AJAX и формат json

У меня есть веб-сервис, который ожидает получить json, например, так:

{"first_name":"test","last_name":"teste","email":"moi@someplace.com","mobile":"+44 22 2222 2222", "password":"testing"}

Мой вызов ajax в jquery:

$.ajax({
        type: "POST",
        url: hb_base_url + "consumer",
        contentType: "application/json",
        dataType: "json",
        data: {
            first_name: $("#namec").val(),
            last_name: $("#surnamec").val(),
            email: $("#emailc").val(),
            mobile: $("#numberc").val(),
            password: $("#passwordc").val()
        },
        success: function(response) {
            console.log(response);
        },
        error: function(response) {
            console.log(response);
        }
    });

Есть ли способ проверить формат, в котором отправляются мои данные? Предположительно, я не отправляю правильный JSON на сервер (это первый шаг в валидации).

Отправляет ли мой код jquery правильный JSON или я что-то упустил?

Решение

На самом деле вы не отправляете JSON. Вы передаете объект в качестве данных, но вам нужно строчить объект и передать строку вместо него.

Ваш dataType: "json" только говорит jQuery, что вы хотите, чтобы он разобрал возвращаемый JSON, это не означает, что jQuery автоматически строгифицирует данные вашего запроса.

Изменить на:

$.ajax({
        type: "POST",
        url: hb_base_url + "consumer",
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify({
            first_name: $("#namec").val(),
            last_name: $("#surnamec").val(),
            email: $("#emailc").val(),
            mobile: $("#numberc").val(),
            password: $("#passwordc").val()
        }),
        success: function(response) {
            console.log(response);
        },
        error: function(response) {
            console.log(response);
        }
});
Комментарии (3)

Мне никогда не везло с таким подходом. Я всегда делаю так (надеюсь, это поможет):

var obj = {};

obj.first_name = $("#namec").val();
obj.last_name = $("#surnamec").val();
obj.email = $("#emailc").val();
obj.mobile = $("#numberc").val();
obj.password = $("#passwordc").val();

Затем в вашем ajax:

$.ajax({
        type: "POST",
        url: hb_base_url + "consumer",
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify(obj),
        success: function(response) {
            console.log(response);
        },
        error: function(response) {
            console.log(response);
        }
    });
Комментарии (0)

В настоящее время вы отправляете данные в виде типичных значений POST, которые выглядят следующим образом:

first_name=somename&last_name=somesurname

Если вы хотите отправлять данные в формате json, вам нужно создать объект с данными и строчить его.

data: JSON.stringify(someobject)
Комментарии (0)