0

この関数を使用して、渡された文字列を Google マップの結果にジオコーディングしようとしています。

function codeAddress(address) {
       var firstResult;
       geocoder.geocode( { 'address': address}, function(results, status) {
         if(status == google.maps.GeocoderStatus.OK) {
             firstResult = results[0];
           } else {
             firstResult = "failed";
         }
       });
       return firstResult;
     }

問題は、Chrome からデバッガーを使用してデバッグしようとして、ceocoder.geocode ステートメントの外側と内側にブレークポイントを挿入しようとすると、プログラムの実行が 3 行目にあることがはっきりとわかりますが、内側の行をスキップしてまっすぐ進むことです。戻り値に (未定義の値を返します)。また、その中のifステートメントを通過することもありますが、そこにブレークポイントを設定しましたが、returnステートメントには行きません。

私はこれを間違った方法でやろうとしていますか? どうすればこれを修正できますか?

4

1 に答える 1

0

私は StackOverflow でいくつかの可能な答えを見つけました。

SOのAleem Saadullahが投稿しました:

最後にそれを理解しました。ばかげたエラーでした。jQueryをリンクする前に、Javascriptファイルをリンクしていました。コードは正常に動作するようになりました。

ミッコ・オータマーはSOで答えました

厳密に言えば、使用しているカスタム CGI が何であれ、JavaScript 構文に準拠していません。

私が提案するのは、通常の JavaScript 解析に影響を与えないように、独自の動的処理を JavaScript コメントにすることです。これは、カスタム JavaScript パーサーを作成してカスタム構文に対応するよりもはるかに簡単です。

例えば

// %import and other custom commands here

最良の方法は、JS ファイルに非 JavaScript をまったく配置しないことです。インポートなどが必要な場合は、より一般的な JavaScript ソリューションがいくつかあります。

http://browserify.org/

http://requirejs.org/

編集2:

SOに関するエンジニアの回答に関する回答が見つかりました:

geocoder.geocode非同期で動作するため、応答が Google のサーバーから配信されるまで待ってから、応答されたデータを使用する必要があります。ループをコールバック内に配置します。

geocoder.geocode( { 'address': zip }, function(results, status) { // status is empty
  if (status == google.maps.GeocoderStatus.OK) {
     var userLat = results[0].geometry.location.lat();
     var userLng = results[0].geometry.location.lng();
     userLatLng = results[0].geometry.location;
     for (var i = data.length-1; i--;) { 
        //loop body
     }
}});//end geocode
于 2015-10-06T18:43:18.100 に答える