Как очистить даные JSON, полученные методом .serializeArray()?

Здравствуйте!
Имеется проблема следующего содержания.
Есть html-форма. Есть такой код:
$( "form" ).submit(function( event ) {
        console.log(JSON.stringify($(this).serializeArray()));
        var arr = $( "form" ).serializeArray();
        $.ajax({
            type: "POST",
            url: "make_order",
            // Tut pizdos
            data: JSON.stringify(arr),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data){alert(test);},
            failure: function(errMsg) {
            alert(errMsg);
    }
});
        event.preventDefault();
});


В результате я получаю такой JSON:
[{"name":"assigment","value":"1"},{"name":"subject","value":""},{"name":"title","value":""},{"name":"description","value":""},{"name":"`pages","value":""},{"name":"sources`","value":""},{"name":"id_writer","value":""},{"name":"discount_code`","value":""},{"name":"email","value":""}]


А мне нужно получить JSON в упрощенном виде ключ значение, вроде:
{"assigment" : "1" } , {"subject":"2"}...
Можно ли так сделать штатными способами?
Спасибо!
  • Вопрос задан
  • 3216 просмотров
Решения вопроса 1
mlnkv
@mlnkv
JavaScript Developer
/*
data - полученный ответ от сервера
*/ 
var result = [];
for (var i = 0; i < data.length; i++) {
  var obj = {};
  obj[data[i].name] = data[i].value;
  result.push(obj);
}
console.log(result); 
// результат
/* [{"assigment":"1"},{"subject":""},{"title":""},{"description":""},{"`pages":""},{"sources`":""},{"id_writer":""},{"discount_code`":""},{"email":""}]  */
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
IonDen
@IonDen
JavaScript developer. IonDen.com
Вы можете добавить свой метод в jQuery и спокойно использовать его в дальнейшем:

$.fn.serializeObject = function () {
    var o = {};
    var a = this.serializeArray();

    $.each(a, function () {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};


Вернет данные в виде нужного вам объекта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы