Reputation: 442
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?
Upvotes: 2
Views: 2956
Reputation: 66488
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)
});
Upvotes: 4
Reputation: 227220
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));
Upvotes: 1
Reputation: 92274
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);
Upvotes: 1