1

JSONを使用してAjax経由でGoogleマップオプションオブジェクトをMySQLデータベースに保存し、データを再度抽出して解析してGoogleマップオプションオブジェクトに戻そうとしています。保存しようとしている基本的なオプションは、中央のプロパティを除いて、正常に保存および呼び出しできるようです。私は得る

エラー: プロパティの値が無効です: [object Object]

これは、元のオプション オブジェクトのコンソール ダンプのスクリーン グラブです。JSON にエンコードされ、データベースに保存され、データベースから再度抽出され、JS オブジェクトに解析された同じデータが続きます。

http://mcserver.gold.ac.uk/temp/gmapoptssave.png

(すみません、初心者なのでここに画像を投稿できません)

json-jquery プラグインの jQuery.toJSON 関数を使用して、ajax 経由で送信する前にオプション オブジェクトを JSON に変換しています。データをJSスクリプトに送り返す前に、PHPのencode_json()関数を使用しています。

他に何をすべきか、または保存されたオプションデータを呼び戻すために別の方法で行うべきことを誰か教えてもらえますか? 問題を回避することができました

if(savedopts != '') mapopts = jQuery.parseJSON(savedopts);
    // This is a hack- should be able to use the parsed JSON object for center directly
    mapopts['center'] = new google.maps.LatLng(mapopts.center.$a, mapopts.center.ab);

しかし、明らかにそれはエレガントではありません。将来的には、他の種類のオプション データも保存できるようにしたいと考えています。

どんなヒントでも大歓迎です、

乾杯、

a|x

4

1 に答える 1

0

MapOptions 型のすべてのプロパティが直接シリアル化できるわけではありません。特に、LatLng オブジェクトにはこの制限があることが知られています (これは「center」プロパティのタイプです)。代わりに、LatLng.toString() または LatLng.toUrlValue() メソッドを使用してこの値を手動でシリアル化し、データベースから値を取得するときに LatLng オブジェクトを再作成する必要があります。

保管

var optsToSave = mapopts;
optsToSave.center = mapopts.center.toUrlValue();
// store optsToSave in database

取得中

var mapopts = jQuery.parseJSON(savedopts);
mapopts.center = new google.maps.LatLng(
    parseFloat(mapopts.center.substring(0, mapopts.center.indexOf(','))),
    parseFloat(mapopts.center.substring(mapopts.center.indexOf(',') + 1)));
于 2012-06-01T15:17:26.233 に答える