在Jquery中将复选框值作为JSON传递

时间:2013-11-26 13:56:12

标签: javascript jquery ajax json checkbox

我有一个输入表单,其中有三个文本字段和一个复选框输入部分,用户可以在其中选择多个值。我还有一个ajax请求,它向api发送一个POST请求。我编写了一个函数来迭代表单输入并将它们解析为JSON,但是,我注意到这对于复选框值不起作用。这是我的功能:

<script>
console.log(document);
var form = document.getElementById("myform");

form.onsubmit = function (e) {
    // stop the regular form submission
    e.preventDefault();

    // collect the form data while iterating over the inputs
    var info = {};
    for (var i = 0, ii = form.length; i < ii; ++i) {
        var input = form[i];
        if (input.name) {
            info[input.name] = input.value;
        }
        addPerson(info);
    }
}

function addPerson(info) {
    $.ajax({
        type: "POST",
        url: "http://example.com",
        data: JSON.stringify(info),
        contentType: "application/json; charset=utf-8",
        crossDomain: true,
        dataType: "json",

        success: function (data, status, jqXHR) {
            alert("success");
        },

        error: function (jqXHR, status) {
            // error handler
            console.log(jqXHR);
        }
    });
}
</script>

我一直在尝试使用

将复选框值转换为JSON
$.each($('input[id="data[i].id"]:checked'), function() {
    var value = $(this).val();
    qualifications.push(value);
});

但是我无法弄清楚如何将这些值添加到发布到服务器的JSON中,任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

尝试过.serialize(),我认为它有效 -

<script>

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            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;
};

$(function() {
    $('myform').submit(function() {
        $('#result').text(JSON.stringify($('myform').serializeObject()));
        return false;
    });
});


function addPerson(result){
  $.ajax({
         type: "POST",
         url: "http://example.com",
         data: JSON.stringify(result),
         contentType: "application/json; charset=utf-8",
         crossDomain: true,
         dataType: "json",

         success: function (data, status, jqXHR) {

             alert("success");
         },

         error: function (jqXHR, status) {
             // error handler
             console.log(jqXHR);

         }
      });
  }




</script>

如果有人对上述有效性有什么想法/意见,或者有更好的方法,我想听听吗?

答案 1 :(得分:1)

试试这个:

var input = form[i];
if (input.name) {
    if(input.tagName.toLowerCase() === 'input' && 
       (input.type.toLowerCase() === 'checkbox' || input.type.toLowerCase() === 'radio') &&
       input.checked)
         info[input.name] = input.value;
    else
       info[input.name] = input.value;
}
addPerson(info);

修改

我建议使用jQuery form.serialize()方法,如@DrixsonOseña所述。