javascript对象到json字符串到php数组 - > POST

Hey guys i really need help with this. i pass this json object to php..

var x = {};
x.xt = {};
x.xt.id = id;
x.xt.to = foo;

somearray.push(x);

convert object to json:

$.toJSON(x);

json string:

[{"x":{"xt":"9","to":"2"}}]

them i post this:

$.post(
    "temp/sop.php",
    { xa: somearray},
    function(data){
        console.log("response - "+ data);
});

server side:

$xtj = $_POST["xa"];
$encodedArray = array_map(utf8_encode, $xtj);
$asnk = json_decode($encodedArray);

This returns:

string(4) "null"

and this:

$asnk = json_encode($xtj);

returns:

null

the data base it is set to:

UTF8

also when i test if it is an array, comes back true..

any idea how to solve this? thanks

also server side:

$xtj = $_POST["xa"];
$asnk = json_decode($xtj);

this returns:

NULL

try using if(get_magic_quotes_gpc()) $xtj = stripslashes($xtj); to lose the excessive escaping before trying to decode.

$.toJSON(x) does not do the conversion in-place; it returns the JSON, and you're just discarding it. You need this instead:

$.post(
    "temp/sop.php",
    { xa: $.toJSON(somearray) },
    // ...
});

Then, on the PHP side, you won't want array_map as it's not going to be an array until you decode the JSON:

$xtj = $_POST["xa"];
$encodedArray = utf8_encode($xtj);  // I'm not sure you need this, by the way.
$asnk = json_decode($encodedArray);

What you are doing is you are converting to json string in JS ($.toJSON()). And then in PHP you are again trying to convert to json string (json_encode()). And you are using array_map() on something that is not an array but a string. (Try echo $_POST["xa"]; to see the contents of it.)