56

I have array made by function .push. In array is very large data. How is the best way send this to PHP script?

 dataString = ??? ; // array? $.ajax({ type: "POST", url: "script.php", data: dataString, cache: false, success: function(){ alert("OK"); } }); 

script.php:

 $data = $_POST['data']; // here i would like use foreach: foreach($data as $d){ echo $d; } 

How is the best way for this?

5 Answers 5

135

Encode your data string into JSON.

dataString = ??? ; // array? var jsonString = JSON.stringify(dataString); $.ajax({ type: "POST", url: "script.php", data: {data : jsonString}, cache: false, success: function(){ alert("OK"); } }); 

In your PHP

$data = json_decode(stripslashes($_POST['data'])); // here i would like use foreach: foreach($data as $d){ echo $d; } 

Note

When you send data via POST, it needs to be as a keyvalue pair.

Thus

data: dataString

is wrong. Instead do:

data: {data:dataString}

Sign up to request clarification or add additional context in comments.

4 Comments

Why use JSON.stringify? What's wrong with just data: {data: dataString}?
@Rocket: I suppose you could do that as well in which case Jquery would serialize the array.
Then you wouldn't need json_decode, $_POST['data'] would already be an array.
Friendly reminder to always validate your post values throwing them around.
9
 dataString = []; $.ajax({ type: "POST", url: "script.php", data:{data: $(dataString).serializeArray()}, cache: false, success: function(){ alert("OK"); } }); 

http://api.jquery.com/serializeArray/

2 Comments

Since serializeArray works by creating a JSOn string, you would first need to use json_decode on the PHP side
I'd suggsst dropping serializeArray, and just doing data: {data: dataString}. Then $_POST['data'] will be an array.
4

Data in jQuery ajax() function accepts anonymous objects as its input, see documentation. So example of what you're looking for is:

dataString = {key: 'val', key2: 'val2'}; $.ajax({ type: "POST", url: "script.php", data: dataString, cache: false, success: function(){ alert("OK"); } }); 

You may also write POST/GET query on your own, like key=val&key2=val2, but you'd have to handle escaping yourself which is impractical.

1 Comment

This didn't work for me, however data: { id_arr: [array variable goes here]} will be accessible as array $_POST['id_arr'] in PHP
4

If you have been trying to send a one dimentional array and jquery was converting it to comma separated values >:( then follow the code below and an actual array will be submitted to php and not all the comma separated bull**it.

Say you have to attach a single dimentional array named myvals.

jQuery('#someform').on('submit', function (e) { e.preventDefault(); var data = $(this).serializeArray(); var myvals = [21, 52, 13, 24, 75]; // This array could come from anywhere you choose for (i = 0; i < myvals.length; i++) { data.push({ name: "myvals[]", // These blank empty brackets are imp! value: myvals[i] }); } jQuery.ajax({ type: "post", url: jQuery(this).attr('action'), dataType: "json", data: data, // You have to just pass our data variable plain and simple no Rube Goldberg sh*t. success: function (r) { ... 

Now inside php when you do this

print_r($_POST); 

You will get ..

Array ( [someinputinsidetheform] => 023 [anotherforminput] => 111 [myvals] => Array ( [0] => 21 [1] => 52 [2] => 13 [3] => 24 [4] => 75 ) ) 

Pardon my language, but there are hell lot of Rube-Goldberg solutions scattered all over the web and specially on SO, but none of them are elegant or solve the problem of actually posting a one dimensional array to php via ajax post. Don't forget to spread this solution.

Comments

1

dataString suggests the data is formatted in a string (and maybe delimted by a character).

$data = explode(",", $_POST['data']); foreach($data as $d){ echo $d; } 

if dataString is not a string but infact an array (what your question indicates) use JSON.

2 Comments

dataString this is only example. I dont must use this, but i dont know what i must use
data: { id_arr: [array variable goes here]}, will be accessible as $_POST['id_arr'] as an array in PHP

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.