javascript处理过程中数组中的数组


Array inside an array during javascript processing

我正在尝试使用Ajax处理表单,但在处理复选框时遇到了问题。我想我可以在数组中创建一个数组,将复选框添加到数据对象中,但这似乎不起作用。它不会显示为控制台中对象的一部分或类似的内容。我试了几个变体,但都没用。这就是目前的情况:

var formData = {
        'fname' : $('input[name=fname]').val(),
        'lname' : $('input[name=lname]').val(),
        'phone' : $('input[name=phone]').val(),
        'email' : $('input[name=email]').val(),
        'sqft'  : $('select[name=sqft]').val(),
        'checked': $('input[name=services[]]:checked').each(function(){
            checked.push($(this).val());
        });
    };

我知道我可以使用serialize(),但老实说,我只是不熟悉处理该方法中的数据。由于我需要用PHP处理数据,我想坚持我所知道的。

这是复选框的标记:

<div class="checks span6">
 <p>Check which services you are interested in:</p><br>
 <input type="checkbox" name="services[]" value="janitorial"><p>Janitorial</p><br>
 <input type="checkbox" name="services[]" value="window"><p>Window cleaning</p><br>
 <input type="checkbox" name="services[]" value="carpet"><p>Carpet service</p><br>
 <input type="checkbox" name="services[]" value="restroom"><p>Restroom sanitation</p><br>
 <input type="checkbox" name="services[]" value="facility"><p>Facility Maintenance</p><br>
 <input type="checkbox" name="services[]" value="floors"><p>Floor strippin &amp; re-waxing</p><br>
 <input type="checkbox" name="services[]" value="moving"><p>Move in or move out</p><br>
 <input type="checkbox" name="services[]" value="other"><p>Other</p><br>
</div>

当前发布的代码中存在语法错误,在为each方法关闭)之后额外出现;。您还应该转义name属性值的[]部分,或者在选择器中将其用引号括起来。除此之外,您存储的是一个jQuery对象,而不是一个选定值的数组。您可以使用map方法。

    'checked': $('input[name="services[]"]:checked').map(function(){
        return this.value;
    }).get()

如果你愿意学习新想法,下面是如何使用.serialize()——非常直接,服务器端(PHP)上的任何东西都不需要更改:

 var formData = $('form').serialize(); //THAT's it!!

在您的情况下,这将产生以下query string——已经进行了URL编码——这就是您当前的数据在POST ing之前将转换为的内容:

services%5B%5D=janitorial&services%5B%5D=window&services%5B%5D=carpet&services%5B%5D=restroom&services%5B%5D=facility