Evaldas Struckus
Evaldas Struckus

Reputation: 11

json array to php

I have array in json, but I want to print it in php. I get in post this :

[{"cartData":{"id":"dragged_567737","left":"255px","top":"71px"}},{"cartData":{"id":"dragged_757836","left":"43px","top":"73px"}}]

but when I use print_r($_POST) in my php file, it print me the empty array. there is my js code:

jQuery('#save_project_data').click( function() {
            var array=[];
            var numItems = $('.icart').length;

            $(".icart").each(function(index) {
                var cart_id = $(this).attr("id");
                var cart_left = $(this).css("left");
                var cart_top = $(this).css("top");

                var cartData = {  
                   "id" : cart_id,                                
                   "left" : cart_left,
                   "top" : cart_top
                };
                queryStr = { "cartData" : cartData };
                array.push(queryStr);
            });

            var postData = JSON.stringify(array);
           $.ajax({
                   url  : "modules/cart_projects/saveData.php",
                   type : "POST",
                   dataType: 'json',
                   contentType: 'application/json; charset=utf-8',

                   data : postData,//{ 'data': '{"name":"chris"}' }
                   traditional: true,
                   success: function(){
                        alert("OK");
                    } 
               });
            return false;
        });

Upvotes: 0

Views: 138

Answers (4)

Tim S.
Tim S.

Reputation: 13843

According to jQuery.ajax() documentation:

Data to be sent to the server. It is converted to a query string, if not already a string. It's appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be Key/Value pairs. If value is an Array, jQuery serializes multiple values with same key based on the value of the traditional setting (described below).

To be safe, you might be better off using the jQuery.post() method.

Finally, I suggest to give the data property an object. That way you can set an identifier for your post data.

Javascript

{
    url: 'modules/cart_projects/saveData.php',
    data: {
        mydata: postData
    }
}

PHP

$_POST['mydata'];

If you need to decode the JSON:

json_decode($_POST['mydata']);

Upvotes: -1

MrCode
MrCode

Reputation: 64526

PHP has native support for decoding JSON with json_decode();

$data = json_decode($_POST['myJson']);
print_r($data);

The PHP $_POST array is interpreted from key value pairs, so you need to change your ajax call like below, because your code is sending the post data with no key.

data : { myJson : postData },//{ 'data': '{"name":"chris"}' }

If you change the data structure like above, you need to also remove your application/json; charset=utf-8 content type.

From the Manual:

Takes a JSON encoded string and converts it into a PHP variable.

Upvotes: 2

MatsLindh
MatsLindh

Reputation: 52802

If you're sending raw JSON-strings to PHP, $_POST will not be populated (as it needs a standard urlencoded string as submitted by POST requests to decode). You can solve this by either using postData as an object: {'json': json}, so that you get the value in $_POST['json'], or by reading the raw response:

$json_string = file_get_contents('php://input');
$struct = json_decode($json_string, true);

Upvotes: 2

Igor
Igor

Reputation: 2919

Try to use json_decode() function.

Upvotes: 0

Related Questions