In my Javascript I am assembling and array like so:

    cachePHP = "'lat':'" + (Number(upDataItems[2])).toFixed(5)+"'";
cachePHP = cachePHP + ",'lon':'" + (Number(upDataItems[3])).toFixed(5)+"'";
cachePHP = cachePHP + ",'msec':'" + (parseInt(upDataItems[7])-parseInt(tz))+"'";
cachePHP = cachePHP + ",'spd':'" + (Number(upDataItems[0])).toFixed(1)+"'";
cachePHP = cachePHP + ",'hdg':'" + (Number(upDataItems[1])).toFixed(1)+"'";

dataCacheNew.push("{"+cachePHP+"}");

I add a varying amount of data to the array, could be 10 items, could be 100...I then shove this over to a PHP file. The PHP file is called from the Javascript like so:

"my.php?che="+JSON.stringify(dataCacheNew);

In the PHP, How can I grab the data so I can 'parse' it and post it to my database?

UPDATE 03/13: I still can't get this to work. Updated per suggestions below, and still...no workie!

My Javascript (jQuery):

     var jsonData = new Array();
    jsonData.push({
    lat: Number(56.34).toFixed(2),
    lon: Number(12.56).toFixed(2),
    msec: Number(123456799000).toFixed(2),
    spd: Number(4.2).toFixed(2),
    hdg: Number(1.4).toFixed(2)
}); 

jsonData.push({
    lat: Number(12.34).toFixed(2),
    lon: Number(34.56).toFixed(2),
    msec: Number(123456789000).toFixed(2),
    spd: Number(1.2).toFixed(2),
    hdg: Number(3.4).toFixed(2)
});


    $.ajax({
        url: 'insertCache.php',
        type: 'POST',
        data: "che="+JSON.stringify(jsonData),
        dataType: 'json',
        contentType: "application/json",
        success: function(result) {
            alert(result);
        }
    });

My PHP:

$cache = $_POST['che'];
    writeData($cache,"insertCache.txt");

$cacheDecode = json_decode($cache);
writeData($cacheDecode,"insertCacheDecode.txt");

insertCache.txt:

[{\"lat\":\"56.34\",\"lon\":\"12.56\",\"msec\":\"123456799000.00\",\"spd\":\"4.20\",\"hdg\":\"1.40\"},{\"lat\":\"12.34\",\"lon\":\"34.56\",\"msec\":\"123456789000.00\",\"spd\":\"1.20\",\"hdg\":\"3.40\"}]

insertCacheDecode.txt COMPLETELY BLANK

what gives?

share|improve this question
2  
Why are you trying to build a JSON string yourself? – Rocket Hazmat Mar 12 at 20:03
Point taken, yep, will definately change to that approach. – Sam Grant Mar 12 at 20:06
Why are you using JSON in the first place? Why not just send the data as a query string to PHP? eg. my.php?lat=123&lon=456 – Rocket Hazmat Mar 12 at 20:08
I want to post all the data to a file on the server, as well as the database. I have been posting each individual array element, one at a time, but with 500+ items, that gets slow... – Sam Grant Mar 12 at 20:12
You can post multiple things in a GET array. my.php?che[0][lat]=124&che[0][lon]=456&che[1][lat]=789&che[1][lon]=101, but this may actually be harder to create (without a library like jQuery), so JSON is ok here :) – Rocket Hazmat Mar 12 at 20:14
show 4 more comments

3 Answers

you can use code like this:

$array = json_decode($_GET['che']);

Note that you don't need to create strings, you can stringify nested object:

dataCacheNew.push({
    lat: (Number(upDataItems[2])).toFixed(5),
    lon: (Number(upDataItems[3])).toFixed(5),
    msec: (parseInt(upDataItems[7])-parseInt(tz)),
    spd: (Number(upDataItems[0])).toFixed(1),
    hdg: (Number(upDataItems[1])).toFixed(1)
});
share|improve this answer
Currently I am doing this: $cache = $_GET['che']; $cacheArray=json_decode($cache); But when I do a $cacheCnt = count($cacheArray); $cacheCnt is equal to 0; – Sam Grant Mar 12 at 20:02
Will try and accept when I get it to work... – Sam Grant Mar 12 at 20:09
Ok, tried to get this working this morning...No dice. I do get the data transferred OK. But still, my array in PHP is showing a size of 0. – Sam Grant 2 days ago
@SamGrant if you contatenate string to send get data (and not $.get jquery that allow to send object) then you may need to encode the array first using "my.php?che="+encodeURIComponent(JSON.stringify(dataCacheNew)) – jcubic 2 days ago
In my PHP, I do a $cache = $_GET['che']; , then I write the $cache to a text file. The data in the text file looks to be OK: [{\"rid\":3158,\"uid\":\"1\",\"bid\":\"1\"},{\"lat\":\"30.0\",\"lon\":\"-86.0\"‌​,\"msec\":1363165240000,\"spd\":\"4.3\",\"hdg\":\"53.6\"}]. But doing a json_decode on the $cache, then checking the resulting array for a size, yeilds 0. – Sam Grant 2 days ago

Your JSON is invalid because you're using single quotes for your attribute names. And on top of that, you're stringifying your already badly encoded JSON.

Use the following instead

dataCacheNew.push({
    lat: Number(upDataItems[2]).toFixed(5),
    lon: Number(upDataItems[3]).toFixed(5),
    ...
});
"my.php?che=" + JSON.stringify(dataCahceNew);
share|improve this answer

Do not try to build a JSON string by yourself. Languages have built-in methods for this. Instead build the object the way you want it, then encode it as JSON.

var cachePHP = {
    lat: (Number(upDataItems[2])).toFixed(5),
    lon:(Number(upDataItems[3])).toFixed(5),
    msec: (parseInt(upDataItems[7])-parseInt(tz)),
    spd: (Number(upDataItems[0])).toFixed(1),
    hdg: (Number(upDataItems[1])).toFixed(1),
};

dataCacheNew.push(cachePHP);

console.log(JSON.stringify(dataCacheNew));
share|improve this answer

Your Answer

 
or
required, but never shown
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.