2

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?

9
  • 2
    Why are you trying to build a JSON string yourself? Commented Mar 12, 2013 at 20:03
  • Point taken, yep, will definately change to that approach. Commented Mar 12, 2013 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 Commented Mar 12, 2013 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... Commented Mar 12, 2013 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 :) Commented Mar 12, 2013 at 20:14

3 Answers 3

4

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)
});
Sign up to request clarification or add additional context in comments.

4 Comments

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;
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.
@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))
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.
1

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);

Comments

1

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));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.