jQuery

2014-11-27 21 views
7

$.when'daki ertelenmiş nesneleri kullanarak birden çok ajax çağrısı için farklı başarı ve başarısız durumları işleme, aynı anda sorgulanan tüm çoklu ajax çağrıları için bir Deferred nesnesi döndürür.jQuery

Her şey başarılı olursa .done() yürütür ve URL'lerden herhangi biri başarısız olursa .fail() yürütür.

Kısmi başarı durumları nasıl ele alınır? (yani, 5 URL'ler $.when'a iletilirse, 3 başarılı olursa, başarı durumuyla başa çıkmamız gerekir ve 2 başarısız olursa hata durumuyla başa çıkmamız gerekir.

$.when($.getJSON(headerUrl), $.getJSON(tasksUrl), $.getJSON(testingTrackerUrl), $.getJSON(highlightsUrl))) 
    .then(function(headerData, tasksData,testingTrackerData,highlightsData) { 
     printData(headerData, tasksData,testingTrackerData,highlightsData); 
    }) 
    .fail(function(data, textStatus, jqXHR) { 
     console.error('Got error in '+jqXHR); 
}); 
+3

'$ .when', o çözülene ertelenmiş bir ana oluşturur ile temelindeki tüm sözler çözüldüğünde, ya da temeldeki sözlerden biri başarısız olduğunda başarısız olur. Farklı ajax çağrıları için farklı durumları ele almak istiyorsanız, bunu tek tek yapmanız gerekir. – adeneo

+0

@adeneo evet Ara devletlerin olamayacağının farkındayım. Ama kısmi başarı ile başa çıkmak ve birden fazla ajx çağrısı için başarısız devletlerin nasıl ele alınacağını bilmek istiyorum. JqXHR readystate'i kullanabilir ve her aramanın durumunu belirleyebilir miyiz? Ya da jQuery'de başka bir yol var mı? – user4300143

+0

Her ajax çağrısı için uygun geri bildirimi kullanırsınız. – adeneo

cevap

5

deneyin

var request = function (url) { 
     return $.getJSON(url) 
} 
, requests = [ 
    headerUrl 
    , tasksUrl 
    , testingTrackerDataUrl 
    , highlightsDataUrl 
]; 
// return array of `resolved` , `rejected` jqxhr objects 
$.when(
    $.map(requests, function (_request, i) { 
     return request(_request) 
    }) 
) 
// do stuff with `resolved` , `rejected` jqxhr objects 
.always(function (arr) { 
    $.each(arr, function (key, value) { 
     // `success` 
     value.then(function (data, textStatus, jqxhr) { 
      console.log(data, textStatus, jqxhr); 
      printData(data) 
     } 
     // `error` 
     , function (jqxhr, textStatus, errorThrown) { 
      console.log(jqxhr, textStatus, errorThrown) 
     }) 
    }) 
}); 

jsfiddle http://jsfiddle.net/guest271314/91Lomwr3/

Sen yapamaz
+0

kod snippet'iniz krem ​​gibi çalıştı. teşekkürler :) – user4300143