Google MapsでJavaScriptのお勉強(PostGISと.NETもあるよ) その5
昨日の内容にちょっと補足です。
マーカーの位置情報の取得について、WebService(asmx)を利用して取得していますが。
デフォルトの設定だと、リモートからの要求に対しては処理が失敗しますね(´・ω・`)
なぜかというと、ASP.NETのデフォルト設定でローカル以外からのPOSTによるWebServiceの呼び出しが禁止されているからです。
これを許可するにはWeb.configに以下のセクションを追加します。
... <system.web> <webServices> <protocols> <add name="HttpPost"/> </protocols> </webServices> ...
で、今日はJSON形式を使用する場合の処理方法についても検証もしておきます(・∀・)
まず、サーバ側の処理を作ってみます。
今回はJson.NETを使用してみようと思うので、プロジェクトでNewtonsoft.Json.dllを参照設定しておきます。
で、こんなコードを書いてみます。
using Newtonsoft.Json; ... SpotInfo[] array = new SpotInfo[ 2 ]; array[ 0 ] = new SpotInfo( 1, "甲府駅", 138.5690139, 35.6670556 ); array[ 1 ] = new SpotInfo( 6, "朗月堂", 138.551497222222, 35.6533722222222 ); JsonSerializer serializer = new JsonSerializer(); StringWriter sw = new StringWriter(); using( JsonWriter jw = new JsonWriter( sw ) ) { serializer.Serialize( jw, array ); } string output = sw.ToString();
こうすると、出力として以下のような文字列が取得出来ます。
[{"Id":1,"Name":"甲府駅","Lon":138.5690139,"Lat":35.6670556},{"Id":6,"Name":"朗月堂","Lon":138.551497222222,"Lat":35.6533722222222}]
サーバ側の処理としては、ジェネリックハンドラでこれをResponse.Write()してやるものを用意します。
で、クライアント側。
Ajaxの応答コールバックでは、取得した応答の文字列に対して、以下の様に記述するだけでspotsにオブジェクトの配列が取得できます。
var spots = eval( "(" + json + ")" );
XMLを使うよりもずっと簡単ですね(´Д`;)
まあ、WebServiceに関してはこれからマーカー情報の追加、削除とかも実装する予定なので、とりあえず今のままにしておきますが(´ω`)