関数からグローバル変数を設定し、ajaxを呼び出して距離を取得したい。 nearestIndex変数は常に未定義です。Ajaxがループ内でグローバル変数を設定する
私が得た最初の解決策は、asyncを使用することでした:false - これは私のPCブラウザでは動作しますが、このプロジェクトはアンドロイドへのwebserviceであり、この解決策はwebviewでは機能しません。
もちろん、async:falseはおすすめしません。私の場合はこの例が必要ですが、スタックオーバーフローでこの問題を探していましたが、私はいつもコールバックについて理解できませんでした。
var allDestination = ["A", "B", "C"];
var nearestIndex;
function getNearest(){
\t var from = myPosition.getLatLng().lat + "," + myPosition.getLatLng().lng;
\t var tempDistance;
\t for(var i=0; i<allDestination.length; i++){
\t \t var destination = allDestination[i].getLatLng().lat + "," + allDestination[i].getLatLng().lng;
\t \t $.ajax({
type: "GET",
url: "http://localhost:8989/route?point=" + from + "&point=" + destination + "&points_encoded=false&instructions=false",
dataType: 'json',
contentType: "application/json",
success: function (data) {
\t var distance = data.distance;
\t if(i == 0){
\t \t tempDistance = distance;
\t \t nearestIndex = i;
\t } else {
\t \t if(distance < tempDistance){
\t \t \t tempDistance = distance;
\t \t \t nearestIndex = i;
\t \t }
\t }
}
});
\t }
}
function onMapClick(e) {
\t myPosition.setLatLng(e.latlng);
\t myPosition.addTo(map);
\t getNearest();
\t allDestination[nearestIndex].addTo(map);
}
ありがとうございました。概念は、alldestinationの長さ= 3の場合、コールバック関数を3回コールしますか? –
ようこそ!そのようなもの:私たちは3回コールバック関数を渡しますが、コールバック関数は最後の '成功'実行時に一度だけ呼び出されます。 – vijayP