2

私のJavascriptでは、次のように組み立てて配列しています:

    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 では、データを取得して「解析」し、データベースに投稿するにはどうすればよいですか?

更新 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 完全に空白

何が与えますか?

4

3 に答える 3

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)
});
于 2013-03-12T20:01:05.397 に答える
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));
于 2013-03-12T20:06:45.737 に答える
1

属性名に一重引用符を使用しているため、JSON は無効です。その上、既に不適切にエンコードされた JSON を文字列化しています。

代わりに以下を使用してください

dataCacheNew.push({
    lat: Number(upDataItems[2]).toFixed(5),
    lon: Number(upDataItems[3]).toFixed(5),
    ...
});
"my.php?che=" + JSON.stringify(dataCahceNew);
于 2013-03-12T20:05:05.210 に答える