| 

.NET C# Java Javascript Exception

4
Moin allerseits.

Ich habe folgendes Plugin programmiert:
jQuery.fn.reloadSubcontent = function(callback_start,callback_step,
callback_stop)
{
if (!historyFirstLoaded)
{
return this;
}
var subcontents = $(this);
var count = subcontents.length;
var parents = [];

return subcontents.each(function(key){
var reloadSubcontent = $(this);
if (!reloadSubcontent.hasClass('reloadSubcontent'))
{
return false;
}
if (reloadSubcontent.attr('href')===undefined ||
reloadSubcontent.attr('href').length<1)
{
return false;
}
if (callback_start !== undefined && typeof callback_start=='function')
{
callback_start();
}
// Abruf der JSON Daten der Skriptseite
XHRplugins.push($.ajax({
url:PW_URL+'/meinplugin.php?'+reloadSubcontent.attr('href'),
type:'get',
success : function(data){
if (data===undefined || !data)
{
return false;
}
parents.push(reloadSubcontent.parent());
reloadSubcontent.replaceWith(data);
if (callback_step !== undefined && typeof callback_step=='function')
{
callback_step();
}
if (key==count-1)
{
if (callback_stop !== undefined &&
typeof callback_stop=='function')
{
callback_stop();
}
$.each(parents,function(k,parent){
parent.animationLive();
});
}
}
}));
});
};


Ich übergebe an diese Funktion mehrere DIVs, die href-Attribute haben. Daraus hole ich mir einen Teil der URL und ersetze diese DIVs durch das, was per AJAX zurück kommt.

Mein Problem: Wenn ich 10 Objekte an die Funktion übergebe, werden die AJAX-Requests gleichzeitig ausgeführt. Wie bekomme ich es hin, dass die Requests immer nacheinander ausgeführt werden, also immer dann das nächste, wenn das vorherige complete ist?

Falls sich jemand fragt, was das XHRplugins.push() soll: ich speichere alle XHR-Objekte in ein Array, um bei bestimmten Aktionen die AJAX-Requests abbrechen zu können.
21.02.2012
johny7 521 1 8
1 Antwort
0
Danke an diejenigen von euch, die sich darüber Gedanken gemacht haben. Ich habe das Problem jetzt durch rekursives Aufrufen gelöst:

// Nachladen von Inhalten/Komponenten; erwartet die entsprechenden Divs als Aufrufendes Element
jQuery.fn.reloadSubcontent = function(callback_start,callback_step,callback_stop)
{
if (!historyFirstLoaded)
{
return this;
}

// Einzelne Elemente in globales Array speichern
$(this).each(function(){
relSubc_container.push($(this));
});

if (callback_start !== undefined && typeof callback_start=='function')
{
callback_start();
}

var parents = [];
function doRelSub(callback_step,callback_stop)
{
var reloadSubcontent = relSubc_container.length ? relSubc_container.shift() : false;
if (!reloadSubcontent)
{
return false;
}
var href = reloadSubcontent.attr('href');
if (!reloadSubcontent.hasClass('reloadSubcontent') || href===undefined || href.length<1)
{
if (relSubc_container.length>0)
{
doRelSub(callback_step,callback_stop);
}
return false;
}
// Abruf der JSON Daten der Skriptseite
XHRplugins.push($.ajax({
url:PW_URL+'/plugin.php/share/reloadSubcontent.php?'+href,
type:'get',
success : function(data){
if (data===undefined || !data)
{
return false;
}
parents.push(reloadSubcontent.parent());
reloadSubcontent.replaceWith(data);
if (callback_step !== undefined && typeof callback_step=='function')
{
callback_step();
}
if (relSubc_container.length>0)
{
doRelSub(callback_step,callback_stop);
}
else
{
if (callback_stop !== undefined && typeof callback_stop=='function')
{
callback_stop();
}
$.each(parents,function(k,parent){
parent.animationLive();
});
}
}
}));
}

doRelSub(callback_step,callback_stop);
return this;
};
22.02.2012
johny7 521 1 8

Stelle deine Javascript-Frage jetzt!