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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.