Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

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 '13 at 20:03
 
Point taken, yep, will definately change to that approach. –  Sam Grant Mar 12 '13 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 '13 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 '13 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 '13 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 '13 at 20:02
 
Will try and accept when I get it to work... –  Sam Grant Mar 12 '13 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 Mar 13 '13 at 14:29
 
@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 Mar 13 '13 at 14:38
 
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 Mar 13 '13 at 14:45
add comment

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
add comment

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
add comment

Your Answer

 
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.