0

JavaScript コード ローダーの非表示に問題がありますが、最後の jax 応答で非表示にする必要があります。

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: function(response){
               fn1(response,mapobject);   //takes 30 seconds
               fn2(response,mapobject);   //takes 10 seconds
               fn3(response,mapobject);   //takes 30 seconds
               fn4(response,mapobject);   //takes 20 seconds
               fn5(response,mapobject);   //takes 30 seconds
               fn6(response,mapobject);   //takes 30 seconds
               fn7(response,mapobject);   //takes 40 seconds
               $("#loader").show();

        }
    });

}

しかし問題は、応答が来た後にローダーが表示されることです。すべての関数呼び出し fn1,fn2,fn3,fn4,fn5,fn6,fn7 の後にローダーを表示したい。助けてください

4

2 に答える 2

2

$.Deffered、特に$.when、およびを使用できます$.then$.ajaxすべての関数でリクエストを実行すると仮定すると、次のようになります。

function f1() {
    return $.ajax({
        url: "someUrl",
        success: function (data) {
            console.log("f1 done")
        }
    });
}

そのような関数は を返しますpromise。これは、次を使用してコールバック内に配置できます$.when

 $.when(f1(), f2(), f3()).then(function () {
     console.log("all done!");
 });

フィドルのサンプル

于 2013-10-08T06:08:38.997 に答える
2

jquery遅延オブジェクトを使用できます。

http://api.jquery.com/deferred.done/

var dfd = $.Deferred();

    dfd
        .done( [ fn1, fn2 ], fn3, [ fn2, fn1 ] )
        .done(function( n ) {
            $( "p" ).append( n + " we're done." );
        });
于 2013-10-08T06:09:00.117 に答える