Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery AJAX with Multiple Array data Parameters

I've successfully posted a single array, but I can't figure out how to send more than one array in an AJAX post. Here is my code for one array:

var a = new Array();
// fill array
var a_post = {};
a_post['array1[]'] = a;

$.ajax({
    url: "submitOrder.php",
    data: a_post,
    type: 'post',
    success: function(data) {
        alert(data);
    }
});

And in submitOrder.php I have:

$array1= $_POST['array1'];

foreach ($array1 as $a => $b)
echo "$array1[$a] <br />";

This works fine. However, when I try to add a second array b_post to the data: field, it doesn't work. I tried data: {a_post, b_post}, and a few variations of that, but I can't get it to work properly. While I'm at it, how would I then load submitOrder.php after posting rather than show an alert of the data?

UPDATE

Using Nicolas' suggestion, I got this to work changing the data field to:

data: {'array1':JSON.stringify(a), 'array2':JSON.stringify(b)},

However, I also need to add the rest of the form data that has been input by the user. I can get this data with $(this).serialize() but if I try to add that to the data field, it does not work. How can I add this data to the above line?

Thanks.

SOLUTION

What ended up working the way I originally had hoped for (with Nicolas' help):

var formData = $(this).serializeArray();
var a_string = JSON.stringify(a);
formData.push({name: 'array1', value: a_string});
var b_string = JSON.stringify(b);
formData.push({name: 'array2', value: b_string});

$.ajax({
    url: "submitOrder.php",
    data: formData,
    type: 'post',
    success: function(data) {
        alert(data);
    }
});            
like image 309
Kevin_TA Avatar asked Jun 04 '12 19:06

Kevin_TA


1 Answers

The data should be encapsuled this way

data: {'first_array':JSON.stringify(array1),'second_array':JSON.stringify(array2)}

Then in PHP:

$array1 = json_decode($_POST['first_array']);
$array2 = json_decode($_POST['second_array']);

You can add the rest of the inputs as well.

data: {'first_array':JSON.stringify(array1),'second_array':JSON.stringify(array2),'input1':$(input[name="input1"]).val()}

Just repeat with all the inputs you want to send.

'input1':$(input[name="input1"]).val(),'input2':$(input[name="input2"]).val(),... etc
like image 155
Nicolás Torres Avatar answered Nov 05 '22 15:11

Nicolás Torres