82

I want to manipulate a JavaScript array in PHP. Is it possible to do something like this?

$.ajax({
 type: "POST",
 url: "tourFinderFunctions.php",
 data: "activitiesArray="+activities,
 success: function() {
 $("#lengthQuestion").fadeOut('slow');
 }
 });

Activities is a single dimensional array like:

var activities = ['Location Zero', 'Location One', 'Location Two'];

The script does not complete when I try this... How can I fix it?

Peter Mortensen
31.3k22 gold badges110 silver badges134 bronze badges
asked Jan 6, 2010 at 14:56
1

9 Answers 9

149
data: { activitiesArray: activities },

That's it! Now you can access it in PHP:

<?php $myArray = $_REQUEST['activitiesArray']; ?>
insertusernamehere
23.7k10 gold badges93 silver badges130 bronze badges
answered Jan 6, 2010 at 15:02
Sign up to request clarification or add additional context in comments.

2 Comments

Why was this answer so hard to find!? Thank you, this is exactly what I needed.
As simple as a hacker! Well done! You made me laugh at myself :D.
12

You'll want to encode your array as JSON before sending it, or you'll just get some junk on the other end.

Since all you're sending is the array, you can just do:

data: { activities: activities }

which will automatically convert the array for you.

See here for details.

answered Jan 6, 2010 at 15:02

Comments

11

You need to turn this into a string. You can do this using the stringify method in the JSON2 library.

http://www.json.org/

http://www.json.org/js.html

The code would look something like:

var myJSONText = JSON.stringify(myObject);

So

['Location Zero', 'Location One', 'Location Two'];

Will become:

"['Location Zero', 'Location One', 'Location Two']"

You'll have to refer to a PHP guru on how to handle this on the server. I think other answers here intimate a solution.

Data can be returned from the server in a similar way. I.e. you can turn it back into an object.

var myObject = JSON.parse(myJSONString);
answered Jan 6, 2010 at 15:00

Comments

11

I know it may be too late to answer this, but this worked for me in a great way:

  1. Stringify your javascript object (json) with var st = JSON.stringify(your_object);

  2. Pass your POST data as "string" (maybe using jQuery: $.post('foo.php',{data:st},function(data){... });

  3. Decode your data on the server-side processing: $data = json_decode($_POST['data']);

That's it... you can freely use your data.

Multi-dimensional arrays and single arrays are handled as normal arrays. To access them just do the normal $foo[4].

Associative arrays (javsacript objects) are handled as php objects (classes). To access them just do it like classes: $foo->bar.

answered Apr 7, 2012 at 4:25

Comments

2

I should be like this:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
 function(response, status, xhr) {
 alert("POST returned: \n" + response + "\n\n");
 })
answered Nov 19, 2014 at 8:22

Comments

1

Use the JQuery Serialize function

http://docs.jquery.com/Ajax/serialize

Serialize is typically used to prepare user input data to be posted to a server. The serialized data is in a standard format that is compatible with almost all server side programming languages and frameworks.

answered Jan 6, 2010 at 15:03

Comments

1

This worked for me:

$.ajax({
 url:"../messaging/delete.php",
 type:"POST",
 data:{messages:selected},
 success:function(data){
 if(data === "done"){
 }
 info($("#notification"), data);
 },
 beforeSend:function(){
 info($("#notification"),"Deleting "+count+" messages");
 },
 error:function(jqXHR, textStatus, errorMessage){
 error($("#notification"),errorMessage);
 }
});

And this for your PHP:

$messages = $_POST['messages']
foreach($messages as $msg){
 echo $msg;
}
Nana Partykar
10.5k10 gold badges50 silver badges79 bronze badges
answered Jun 20, 2013 at 17:18

Comments

1

Use the PHP built-in functionality of the appending the array operand to the desired variable name.

If we add values to a Javascript array as follows:

acitivies.push('Location Zero');
acitivies.push('Location One');
acitivies.push('Location Two');

It can be sent to the server as follows:

$.ajax({ 
 type: 'POST',
 url: 'tourFinderFunctions.php',
 'activities[]': activities
 success: function() {
 $('#lengthQuestion').fadeOut('slow'); 
 }
});

Notice the quotes around activities[]. The values will be available as follows:

$_POST['activities'][0] == 'Location Zero';
$_POST['activities'][1] == 'Location One';
$_POST['activities'][2] == 'Location Two';
answered Mar 26, 2017 at 20:32

Comments

0

This is because PHP reads your value as a string. If I don't want to pass my data as an object (like in the previous answers, which are also fine), I just do this in my PHP:

 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

The last line splits string into bits after every comma. Now $activitiesArray is also an array. It works even if there is no comma (only one element in your javascript array).

Happy coding!

answered Jul 29, 2019 at 7:58

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.