[JQUERY] jQuery Element an Ajax done/success Funktion übergeben

Testie

New member
Hallo,

ich habe mehrere Elemente (tds) welche über Ajax nach dem Laden der Seite nachträglich mit Text gefüllt werden sollen.

Folgender Code:
Code:
for ( var i = 0; i < tds.length; i++ ) {
    var modulename = $(tds[ i ]).find('.modulename').html();
    var installed  = $(tds[ i ]).find('.installed').html();
    $(tds[ i ]).html('<img src="template/images/loader_table.gif" width="16" height="9" alt="load" /> Modulversion wird abgefragt.');
    
    $.ajax({
         url: 'scripts/get_newest_module_version.pl',
         dataType: 'xml',
         data: {
            modulename: escape(modulename),
            installed: escape(installed)
         },
         success: function(xml) {
            var moduleversion = $(xml).find("moduleversion").text();
            $(tds[ i ]).html( moduleversion );  
         }
      });
}

Wenn Ajax jetzt fertig ist soll eben in das bestimmte Element $(tds[ i ]) geschrieben werden. Aber wenn der Aufruf fertig ist und Perl das Ergebins liefert ist das Element an der Stelle wohl unbekannt!?

Wie kann ich eben genau dieses Element $(tds[ i ]) an done/success übergeben?

Danke im Voraus.

Gruß
 
Eine Closure speichert die Variable, nicht deren Wert - also bei jedem Element den Wert von i nach dem Durchlauf der Schleife.
Du musst daher eine zusätzliche Closure verwenden, die eine Funktion zurückgibt - siehe hier.

PS: Funktionen sollten generell nicht innerhalb einer Schleife erstellt werden.
 
Hallo und Danke für deine Antwort.

Ich habe jetzt ein Array lokal definiert und schreibe dort die elemente rein. Dann übergebe ich noch den index mit in data (welcher dann auch in XML steht) und schon funktioniert es.

Geht bestimmt auch einfacher....

Code:
var tds_dashboard = new Array();

function get_newest_versions( tds ){
  for ( var i = 0; i < tds.length; i++ ) {
    var modulename = $(tds[ i ]).find('.modulename').html();
    var installed  = $(tds[ i ]).find('.installed').html();
    $(tds[ i ]).html('<img src="template/images/loader_table.gif" width="16" height="9" alt="load" />');
    tds_dashboard[i] = $(tds[ i ]);
    $.ajax({
       url: 'scripts/get_newest_module_version.pl',
       dataType: 'xml',
       data: {
          modulename: escape(modulename),
          installed: escape(installed),
          index: i
       },
       success: function(xml){    
          var result        = $(xml).find("result").text();
          var moduleversion = $(xml).find("moduleversion").text();
          var index         = $(xml).find("index").text();
          var new_version   = $(xml).find("new_version").text();
          var url           = $(xml).find("url").text();
          if(result == 1){
            if(new_version == 1){
              tds_dashboard[index].html( '<a href="' + url + '" title="Zur METACPAN Seite"><i class="icon-link"></i>' + moduleversion + '</a>' );
            }else{
              tds_dashboard[index].html( '<i class="icon-check"></i>' + moduleversion );
            } 
          }else{
            tds_dashboard[index].html( '<i class="icon-warning"></i>FEHLER' );
            tds_dashboard[index].addClass('error');
          }   
       }
    });  
  }
}

Gruß
 
Zurück
Oben