0

mapquest から GIS データを取得するこの単純な関数があります。

function reverseGeocoding(lat,lng){
    var url = 'http://open.mapquestapi.com/nominatim/v1/reverse?format=json&lat=' + lat + '&lon=' +lng+' &zoom=18&addressdetails=1';
    $.ajax({
        url: url,                       
        crossDomain:true,
        success: function(response){                
            $("#revgeo-place").html(response.display_name);                 
        }
    });

}

この関数が別の関数から呼び出されたときに戻り値が非同期に更新されるようにするにはどうすれば改善できますか?

関数にDOM参照を明示的に入れたくありません.ajaxを非同期に保ちたいのですが、理想的には次のようにする必要があります。

$("#revgeo-place").html(reverseGeocoding(lat,lng).display_name);

function reverseGeocoding(lat,lng){
    var url = 'http://open.mapquestapi.com/nominatim/v1/reverse?format=json&lat=' + lat + '&lon=' +lng+' &zoom=18&addressdetails=1';
    $.ajax({
        url: url,                       
        crossDomain:true,
        success: function(response){
            console.log(response);
            return response;                                    
        }
    });

}

これを行うと、DOM オブジェクトが更新されないように見えます。その後、関数は応答を返します。

どんなアイデアも役に立ちます ありがとう!

4

4 に答える 4

5

コールバックを使用できます:

function reverseGeocoding(lat,lng, callback){
    var url = 'http://open.mapquestapi.com/nominatim/v1/reverse?format=json&lat=' + lat + '&lon=' +lng+' &zoom=18&addressdetails=1';
    $.ajax({
        url: url,                       
        crossDomain: true,
        success: callback
    });
};

reverseGeocoding(lat,lng, function(response){

    $("#revgeo-place").html(response.display_name);

});

したがって、reverseGeocoding関数は DOM に依存しません。

于 2012-12-07T12:20:02.950 に答える
3

ajax 呼び出しから遅延オブジェクトを返し、done()関数を使用して、ajax 呼び出しが完了したときに HTML を更新します。

reverseGeocoding(lat,lng).done(function(data) {
    $("#revgeo-place").html(data.display_name);
});

function reverseGeocoding(lat,lng){
    var url = 'http://open.mapquestapi.com/nominatim/v1/reverse?format=json&lat=' + lat + '&lon=' +lng+' &zoom=18&addressdetails=1';
    return $.ajax({
        url: url,                       
        crossDomain:true
    });
}
于 2012-12-07T12:17:34.447 に答える
0

の値を設定したときに AJAX 要求の値が返されなかったため、2 番目の例は機能しません$("#revgeo-place").html()

更新された要素を修正できるようにする場合は、次のようにパラメーターとして関数に追加します。

function reverseGeocoding(lat, lng, $updateElement){
    var url = 'http://open.mapquestapi.com/nominatim/v1/reverse?format=json&lat=' + lat + '&lon=' +lng+' &zoom=18&addressdetails=1';
    $.ajax({
        url: url,                       
        crossDomain:true,
        success: function(response){                
            $updateElement.html(response.display_name);                 
        }
    });
}

reverseGeocoding(latitude, longitude, $("#revgeo-place"));
于 2012-12-07T12:19:08.190 に答える
0

ajax関数の完了時に呼び出される関数にonSuccessパラメーターを追加できますreverseGeocoding

function reverseGeocoding(lat, lng, onSuccess){
    var url = 'http://open.mapquestapi.com/nominatim/v1/reverse?format=json&lat=' + lat + '&lon=' +lng+' &zoom=18&addressdetails=1';
    $.ajax({
        url: url,                       
        crossDomain:true,
        success: function(response){
            onSuccess();                                 
        }
    });
}

function onReverseGeocodingSuccess() {
    $("#revgeo-place").html(response.display_name); 
}

reverseGeocoding(100, 200, onReverseGeocodingSuccess);
于 2012-12-07T12:19:52.090 に答える