P-mako
あなたも質問に答えられます!
ウォッチリストに追加
- 状態:終了
- 回答数:4 / 5件
- 回答ポイント:90ポイント
- 登録:2007-11-05 11:20:37
- 終了:2007-11-12 11:25:03
- カテゴリー:
インターネット
ウェブ制作
非同期の処理を同期に変えることはできないかと思いますので
下記のように実行処理の部分を引数で与える形にしてはどうでしょうか?
function add2latlng( address , func ) {
geocoder = new GClientGeocoder();
geocoder.getLatLng(address,
function(point) {
var result = {};
result["lat"] = point.lat();
result["lng"] = point.lng();
alert( "[2]address:" + address + "/lat:" + result['lat'] + "/lng:" + result['lng'] );
result['address'] = address;
alert( "[3]address:" + address + "/lat:" + result['lat'] + "/lng:" + result['lng'] );
func(result);
}
);
}
result = add2latlng(
"渋谷区1-1",
function(result){
//実行する処理
alert( "[1]address:" + result['address'] + "/lat:" + result['lat'] + "/lng:" + result['lng'] );
}
);
URLはダミーです
(XML)HttpRequestオブジェクトのようにreadyStateのような状態監視ができれば良いなぁと思っていたのですが、コールバックハンドラ形式でも工夫次第で解決できるかも知れないですね。
でも、複数の住所を緯度経度に変換して取得したいので、もう少しスマートな方法があればよいんですが・・・
もしくは、上記の下から7行目の result = add2latlng( で、resultに取得できてしまうんでしょうか?
私の知識では意味の無い戻り値だと感じますが・・・
今試せる環境にないので、後で試してみます。
最後の部分を
result['address'] = address;
while(result['lat'] == undefined && result['lng'] == undefined);
alert( "[3]address:" + address + "/lat:" + result['lat'] + "/lng:" + result['lng'] );
return result;
でどうでしょうか?
非同期からの結果が入るのを待つ感じです。
これで[2]->[3]->[1]の順序になって、3つとも期待通りの値が入ると思います。
urlはダミー
すいません 上記のは確かにresultにはreturnしないのではいりませんね
複数でしたら下記のような感じではどうでしょうか?
var add2latlng = function(address, func){
var geocoder = new GClientGeocoder();
//全部の処理を終えたか確認
//終えていればfuncを実行
var execute = function(){
for(var i = 0;i < address.length;i++){
if( !address[i].complete ){
return ;
}
}
func(address);
}
//一つ分取得しexecute実行
var getLatLng = function(index){
geocoder.getLatLng(
address[index]["address"],
function(point) {
address[index]["lat"] = point.lat();
address[index]["lng"] = point.lng();
address[index].complete = true; //取得フラグ
execute();
}
);
}
//各addressのlat,lng取得関数呼び出し
for(var i = 0;i < address.length;i++){
//取得フラグ
address[i].complete = false;
//各都道府県データ取得
getLatLng(i);
}
};
new add2latlng(
//形式は{"address":"渋谷区1-1"}の配列形式
[{"address":"渋谷区1-1"},{"address":"渋谷区2-4"},{"address":"渋谷区3-6"}],
//実行処理
function(result){
for(var i = 0;i < result.length;i++){
alert( "["+i+"]address:" + result[i]['address'] + "/lat:" + result[i]['lat'] + "/lng:" + result[i]['lng'] );
}
}
);
ダミーURLです
この変換処理はWebServiceでも公開されているので,サーバサイドで問い合わせて返す処理を用意すれば比較的簡単に同期処理が書けます。コールバック処理でモデルを更新して,モデルからビューに更新を通知すると言った形で処理した方が素直かとは思いますが。
http://code.google.com/apis/maps/documentation/services.html#Geo...
var proxyUrl = "/cgi-bin/google/maps/proxy.cgi"; function add2latlng(address) { var request = new GXmlHttp.create(); var response; var result = new Array(); request.open("GET", proxyUrl + "?q=" + encodeURI(address), false); request.send(null); response = eval("(" + request.responseText + ")"); for (var i = 0;i < response["Placemark"].length;i++) { var coordinates = response["Placemark"][i]["Point"]["coordinates"]; result.push({"lat":coordinates[0],"lng":coordinates[1]}); } return result; }
おとなり質問
- phpとcurlを使って簡単なHTTPクライアントのようなものを作ろうと思っています。 以下のコード実行すると Bad Request Your browser sent a request that this s..
2 - ASPの質問です。 Asp上で(.netではありません。)lzh形式の圧縮ファイルを解凍する方法を教えてください。 Unlha32.dllを使うのを想定してますがそれ以外でもか..
1 - php4.2 WINで (メール送信設定に関しての質問です) メールを送ろうと思います。 その際にMAIL@MAIL.JPにメールを送るとして <? print("<a href=\"mailto..
1 - GoogleMapのAPIアクセスキーを取得したのですが、最初にサンプルコードでローカルからアクセスした後にwww.xxxxx.jpのサーバからキーを出すとアクセスキーは他の..
1 - さくらインターネットのレンタルサーバで、phpからmail関数でメールを送ると、Return-Pathを第4パラメータとして持たせても、変更できずに 「Return-Path: アカ..
1 - Googleで検索結果数が241億ある「inurl:www」を超える、極限のキーワードを教えてください。 私が調べている限りでは、「inurl:www」で検索したときに --- in..
5 - ASPのプログラムから、SQL serverにデータを挿入する時のSQL文で、エスケープ処理しなくてはいけない、文字(記号)とその処理方法を教えて下さい。 PHPだと、pg..
1 - 旅行会社で、Google Map API を上手に使った事例を探しています。有名なのはフォートラベル( www.4travel.jp )ですが、その他のイケてる事例を教えてください。..
2 - ディレクトリ・ゲイトを見つけまして、ディレクトリごと制限できてすごく良さそうですが質問です。 ttp://www.webpower.jp/websofts/others/web_protection/dire..
1
23ポイント
