jQuery

2016-04-01 18 views
0

Çoklu Eşzamanlı Ajax İstekleri (bir geri arama ile) Tüm veritabanı çağrılarını ayrı komut dosyalarına bölerek ve bunları aynı anda ajax ile çalıştırarak daha hızlı yüklenecek bir sayfa almaya çalışıyorum. Biraz araştırma yaptım ve jQuery'nin buna dikkat edebilecek $ .when(). Then() işlevine sahip olduğunu gördüm. Ben ajax'ın temelleri ile iyiyim ama ertelenmiş/vaat kavramı biraz kafamı karıştırdı. Aşağıdaki kodu denedim ancak verileri yalnızca ilk ajax sonucundan yükleyeceğim. Birincisini yorumlamak bir sonraki filmi yükleyecek, ancak sadece bir tanesi sayfada görünecektir. Bu konuda herhangi bir yardım için teşekkür ederiz. Teşekkürler.jQuery

$.when( $.post('extensions/ext_adjustments_investigation/general_details.php', {sku: sku},function(data) { result = data; }), 
       $.post('extensions/ext_adjustments_investigation/location_information.php', {sku: sku},function(data1) { result1 = data1; }), 
       $.post('extensions/ext_adjustments_investigation/annotations.php', {sku: sku},function(data2) { result2 = data2; }), 
       $.post('extensions/ext_adjustments_investigation/adjustment_history.php', {sku: sku},function(data3) { result3 = data3; }) 

    ).then( 
    function() { 
     $("#searching").addClass("hidden"); 
     $("#load").prop("disabled",false); 
       $("#general").html(result).hide().slideDown()("slow"); 
       $("#location").html(result1).hide().slideDown()("slow"); 
       $("#anno").html(result2).hide().slideDown()("slow"); 
       $("#history").html(result3).hide().slideDown()("slow"); 
       } 
    ); 
+0

https://jsfiddle.net/rayon_1990/x41gacoj/ – Rayon

+0

Bu benzer soruya bakın http://stackoverflow.com/questions/287188/how-to-know-when-all-ajax-calls-are-complete – Bolza

cevap

0
$.when(calla(), callb()).then(
    function(result1, result2){ 
     //do something with the results 
    } 
    , 
    function(error){ 
     console.log('error'+error); 
    } 
); 

Bunu çalışması için başarı ve hata fonksiyonları argümanlar eklemeye devam. Belki bu şekilde mekanize edilebilir

$.when(
    $.post('extensions/ext_adjustments_investigation/general_details.php', {sku: sku}), 
    $.post('extensions/ext_adjustments_investigation/location_information.php', {sku: sku}), 
    $.post('extensions/ext_adjustments_investigation/annotations.php', {sku: sku}), 
    $.post('extensions/ext_adjustments_investigation/adjustment_history.php', {sku: sku}) 
).then(
    function (general, location, annotations, history) { 
     $("#searching").addClass("hidden"); 
     $("#load").prop("disabled", false); 
     $("#general").html(general).hide().slideDown()("slow"); 
     $("#location").html(location).hide().slideDown()("slow"); 
     $("#anno").html(annotations).hide().slideDown()("slow"); 
     $("#history").html(history).hide().slideDown()("slow"); 
    } 
); 
+0

Ne yazık ki, birden fazla jQuery Ajax'ın sonuçları '$ .when ile çağırıyor.() 'bu portreler kadar basit değildir (her argüman bir değerler dizisidir) ve asla mor yoktur Tek bir hata argümanı. – jfriend00

0

yardımcı Umut aşağıdaki gibidir:

var baseURL = 'extensions/ext_adjustments_investigation/'; 
var data = [ 
    {script: 'general_details.php', selector: "#general"}, 
    {script: 'location_information.php', selector: "#location"}, 
    {script: 'annotations.php', selector: "#anno"}, 
    {script: 'adjustment_history.php', selector: "#history"} 
]; 
var promises = data.map(function(item) { 
    return $.post(baseURL + item.script, {sku: sku}).then(function(data, textStatus, jqXHR) { 
     return data; 
    }, function(error) { 
     console.log(error); 
     return $.when('error');//error recovery 
    }); 
}); 
$.when.apply(null, promises).then(function() { 
    $('#searching').addClass('hidden'); 
    $('#load').prop('disabled', false); 
    for(var i=0; i<arguments.length; i++) { 
     $(data[i].selector).html(arguments[i]).hide().slideDown()('slow'); 
    } 
}); 
+0

Merhaba Azder, yaklaşımınızı denedim, ancak hala genel ajax çağrısından gelen verileri gösterir, ancak şu anda kelime başarısı ve sonu var. Neden sadece ilk aramanın neden .then() işlevine iletildiğini düşünür müsün? – redd42

+0

@ redd42, https://api.jquery.com/jquery.when/ adresinden önceki örnekte, $ .when ($ .ajax ("/page1.php"), $ .ajax ("/ page2.") Kullanılır. php ")) .done (işlev (a1, a2) {', bu yüzden '' yerine '.done' yerine .dök 'yerine, gerçek kodu kontrol etmeden, neden başarısız olduğunu düşünemiyorum. – Azder

1

bir geri arama veri almak gerekir o