यहाँ, एक सहायक समारोह मैं LoadInitialData बुलाया लिखा है यह एक और अधिक सुरुचिपूर्ण तरीका इस उदाहरण लिखने के लिए इस LoadInitialData(urlArray, dataReturnedArray, callback)
///
/// 1. The magical function LoadInitialData
///
///
/// <summary>
/// This functions allows you to fire off a bunch of ajax GET requests and run a callback function when
/// all the requests come back that contains an array of all your ajax success data
/// </summary>
/// <params>
/// urlArray - an array of urls to be looped and ajaxed
/// dataReturnedArray - this array will contain all data returned from your ajax calls. Its stuctured like this
/// [{url: "http//site.com/1", "data": "your data"}, {url: "http//site.com/2", "data": "your data"}]
/// dataReturnedArray[0] is data from call 1, dataReturnedArray[1] is data from call 2 etc. It might be a
/// good idea to pass in a global array so you can use this data throughout your application.
/// callback - a function that runs after all ajax calles are done, dataReturnedArray is available in the callback
/// </parms>
///
function LoadInitialData(urlArray, dataReturnedArray, callback){
// set up a deffered promise to fire when all our async calls come back
var urls = urlArray, defers = [], defer;
var urlsLength = urls.length;
for(var i = 0, j = urlsLength; i < j; i++){
var u = urls[ i ];
defer = $.ajax({
type : "GET",
dataType : "jsonp",
url: u,
success: function(data){
dataReturnedArray.push({
url: u,
data: data
});
}
});
defers.push(defer);
}
$.when.apply(window, defers).then(function(){
// Do Something now that we have all the data
console.log("done fetching all data");
callback(dataReturnedArray);
});
}
///
/// 2. Your config…. urlArray, dataReturnedArray, callback
///
var app = app || {};
app.data = []; // will hold the fetched data
var urlArr = ["http://site.com/2", "http://site.com/2"]; // the urls to get data from
// function to call once all the data is loaded
callback = function(data){
// data cleansing
var tblData = [];
$.each(data, function(key, value){
$.each(value.data, function(key, value){
tblData.push(value);
});
});
$("#loader").hide();
};
///
/// 3. Kick it all off!
///
// show a loader here
$("#loader").show();
// fire off the code to fetch the initial data
LoadInitialData(urlArr, app.data, callback);
स्रोत
2013-08-29 14:56:12
आपको क्यों लगता है कि यह सुरुचिपूर्ण नहीं है? – topek
तीसरे बार इस तरह के कोड लिखने के बाद मुझे लगता है कि यह एक काफी आम परिदृश्य है और इसे बेहतर तरीके से डिफरर्ड ऑब्जेक्ट्स फ्रेमवर्क द्वारा संभाला जा सकता है जिसे मैं बस देख रहा था। –