2013-03-12 78 views
2

在我的JavaScript我組裝和數組,像這樣:的Javascript JSON到PHP數組

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+"}"); 

我將數據添加到陣列的變化量,可能是10個項目,可能是100 ......然後我將其推送到PHP文件。 PHP文件是由JavaScript調用,像這樣:

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

在PHP中,我怎樣才能獲取數據,所以我可以「解析」,並將其上傳到我的數據庫?

UPDATE 03/13: 我仍然無法得到這個工作。更新每個建議下面,仍然...沒有工作!

我的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); 
     } 
    }); 

我的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 完全空白

是什麼給了?

+2

你爲什麼試圖自己建立一個JSON字符串? – 2013-03-12 20:03:33

+0

採取的一點,是的,肯定會改變這種做法。 – 2013-03-12 20:06:11

+0

爲什麼你首先使用JSON?爲什麼不把數據作爲查詢字符串發送到PHP?例如。 'my.php?lat = 123&lon = 456' – 2013-03-12 20:08:54

回答

4

你可以使用這樣的代碼:

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

注意,你並不需要創建的字符串,可以嵌套字符串化對象:

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) 
}); 
+0

目前我正在這樣做: '$ cache = $ _GET ['che']; $ cacheArray = json_decode($ cache);' 但是當我做一個 '$ cacheCnt = count($ cacheArray);' $ cacheCnt等於0; – 2013-03-12 20:02:47

+0

當我開始工作時,我會嘗試接受... – 2013-03-12 20:09:28

+0

好的,今天早上試圖讓這個工作...沒有骰子。我確實得到的數據傳輸OK。但仍然,我在PHP中的數組顯示的大小爲0. – 2013-03-13 14:29:39

1

你JSON是無效的,因爲你使用單引號爲您的屬性名稱。最重要的是,你正在對你已經很糟糕的JSON進行字符串化。

使用以下代替

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

不要試圖自己建立一個JSON字符串。語言有內置的方法。相反,按照你想要的方式構建對象,然後將其編碼爲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));