I am building a Laravel application. In the back-end, the $controller->wantsJson() method is TRUE if the content type of the request is application/json. So, to satisfy this, my jQuery AJAX call is this.
jQuery.ajax({
    type:        "POST",
    method:      "PUT",
    url:         $form.attr('action'),
    data:        $form.serialize(),
    dataType:    "json",
    contentType: "application/json; charset=utf-8"
})
This correctly triggers the wantsJson() response I need. The problem then is that jQuery cannot supply POST data as an application/json correctly. It tries to write it as a query string, which doesn't work for the PHP backend when it receives that content type.
To satisfy this, I need to stringify a JavaScript object-array into the data field.
JSON.stringify(dataObj)
So now the problem is, I don't have a concise way of turning a multidimensional form into an object-array. If I just try to convert the output of $.serializeArray(), I get this, which isn't able to be interpreted by the backend.
{
    'something' : 1,
    'field[foo]' : 2,
    'field[bar][]' : "a",
    'field[bar][]' : "b",
    'field[bar][]' : "c",
}
And that of course doesn't work. I need some sort of RegEx parser that can convert this form ...
<input name="something" value="1" />
<input name="field[foo]" value="2" />
<input name="field[bar][]" value="a" />
<input name="field[bar][]" value="b" />
<input name="field[bar][]" value="c" />
Into ...
{
    'something' : 1,
    'field'     : {
        'foo'   : 2,
        'bar'   : [
            'a',
            'b',
            'c',
        ]
    }
}
You'd expect something like this to exist already, but I can't find anything satisfactory.
I had the same problem but this package did the trick: jQuery Serialize Object
It's easy to use, just call this on your form (after loading the script)
$('form#contact').serializeJSON(); // to get the form as a JS object
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With