2017-03-01 21 views
2

現在、小規模なプロジェクトに取り組んでおり、API経由でGoogleマップ上の場所を更新する際に直面している問題に頭を下げることはできません。Googleマップでの位置情報の更新 - API

クイックランダウン(この部分は、すべての作業) - から長いランダム緯度とを引っ張るPHPスクリプトをヒットするのAjaxを使用しbuttonIのクリックオン - いくつかの緯度と長い値 とMySQLデータベースを持っていますjsonにエンコードします。 - 緯度と経度の値を正常に取得し、警告を出したり、ページのどこにでも挿入することができます。

ここに私の問題があります。私は完全に正常に動作するGoogle Maps APIスニペットを使用しています。これはマップを表示し、ボタンのクリックで発生した関数で緯度と経度の値をハードコードすると、地図を新しい場所に再配置します。ただし、Ajaxスクリプトを使用して緯度と経度の値を挿入すると、位置は更新されません。

はここで(。。PHPとAjaxコントローラー作業のみフロントエンドjQueryの)私のコードである上記の例から

<script> 
var map; 
function initialize() 
{ 
map = new google.maps.Map(document.getElementById('map-canvas'), { 
center: new google.maps.LatLng(48.1293954,12.556663),//Setting Initial  Position 
zoom: 2 
}); 
} 


function newLocation(newLat,newLng) 
{ 
map.setCenter({ 
    lat : newLat, 
    lng : newLng 
}); 
} 

google.maps.event.addDomListener(window, 'load', initialize); 

$(document).ready(function() 
{ 
$("#1").on('click', function() 
{ 

// Get lat and long new values from MySQL 
$.ajax({ 
    type: "POST", 
    url: 'core/ajax_controller.php?c=controller', 
    data: $(this).serialize(), 
    dataType: 'json', 
    success: function(data) { 

    newLocation(data[0],data[1]); 
    map.setZoom(15); 

} 

}); 

}); 
}); 
</script> 

。たとえば、lat値を保持しているdata [0]を警告または印刷すると、値はプレーンテキスト - "26.1725364"として表示されます。ただし、マップ関数 "newLocation"に追加すると、関数に渡されていないように見え、マップを再入力します。

しかし、私はAjaxを削除し、ちょうど次のものを持っています。それは、ボタンの各クリックがマップセンターを更新する、動作します。

$("#1").on('click', function() 
{ 
    newLocation(12.12345678,12.12345678); 
    map.setZoom(15); 

私の問題は何とか別の機能の中で2番目のjavascript関数 "newLocation"にアクセスしているようです。

これを正しく行う方法はありますか? Ajaxリクエストから

おかげ

+0

...しかし、試してみてください:

だから、簡単な修正は次のようになり、 'newLocation(データ[0] .lat、データ[0] .lng);'に成功コールバック。または 'newLocation(data.lat、data.lng);' –

+0

ありがとう@LouysPatriceBessette、喜んではありません。問題は、データを取得する機能に関連しているようには見えません。私が言ったように、私がnewLocation(12.12345678,12.12345678)を動かすと、 Ajaxリクエストの外側では、ハードコードされた値を使用して動作します。そのため、エラーには、現在の関数の中でその関数を呼び出すことと何か関係があるはずです。 – PassCode

+0

コールバックで、 'console.log(JSON.stringify(data));'を追加し、結果を投稿してください。 ;) –

答えて

1

あなたdata結果は文字列の配列です。これは速いだけ推測です

success: function(data) { 

    newLocation(parseFloat(data[0]),parseFloat(data[1])); 
    map.setZoom(15); 

} 
+1

これは修正でした!助けてくれてありがとう。 それで、私は、この関数がそれを警告するだけでなく、プレーンテキストとしてページに挿入することとは異なることを、関数が読んでいることに気づいていませんでした。 – PassCode

+0

また、サーバーに '{lat:-33.847973、lng:150.6517684} 'のように' data'を送信して、 'newLocation(data)'のように関数に渡すこともできます。しかし、それはコードの効率的な話です。 ;)私はしばしば言う、もしそれが壊れていない場合は、それを修正しないでください!笑 –

+0

答えを受け入れることを考え、おそらくupvote !! ;) –

関連する問題