2009-08-16 6 views
2

J'ai cet appel ajax pour charger une sélection de données en XML.Chargement de AJAX avec Jquery Problème

Je ne reçois aucune erreur JS, il fait l'avant, le complet ne fonctionne pas, je suppose que je n'appelle pas les données correctement.

Des pensées sur ce que je fais mal dans la boucle de fonction complète?

$.ajax({ 
    type: "GET", 
    url: "xml/classes.xml", 
    dataType: "XML", 
    beforeSend: function(){ 
    $('#classContainer').append("<p>Loading</p>");}, 
    complete: function() { 
    $(this).find('monday').each(function(){ 

      var $classdate = $(this); 
      var title = $classdate.find("class").attr('title'); 

      var level = $classdate.find("class").attr('classLevel'); 
      var time = $classdate.find("time").text(); 
      var duration = $classdate.find("time").attr("duration"); 
      var hourofday = $classdate.find("time").attr("hourofday"); 
      var location = $classdate.find("location").text(); 



      var Monhtml = '<div class="classBlock">'; 

      Monhtml += '<p class="title">' + title + '<span class="loadingPic" alt="Loading" /> ' + ' </p>'; 
      Monhtml += '<p class="infoBar"> <strong>Time:</strong>' + time + '<span class="hour">'+ hourofday +'</span><br>'+'<strong>Duration:</strong>' + duration +'&nbsp;Minutes <br>' + '<strong>Location:</strong>' + location + '<br><strong>Instructor:</strong> </p>'; 
      Monhtml += '<p class="description"> <span class="level">' + level + '</span></p>' ; 

      Monhtml += '</div>'; 


      $('#classContainer').append($(Monhtml)); 
     }); 
     } 
    }); 
}); 

Changé complet à:

success: function(xml) { 
    $(xml) 

Et il charge, ce qui est la différence?

Répondre

1

Votre réponse n'est pas disponible dans la fonction complète. Essayez ceci:

$.ajax({ 
    type: "GET", 
    url: "xml/classes.xml", 
    dataType: "XML", 
    beforeSend: function(){ 
    $('#classContainer').append("<p>Loading</p>");}, 
    complete: function(resp) { 
    $(resp).find('monday').each(function(){ 

      var $classdate = $(this); 
      var title = $classdate.find("class").attr('title'); 

      var level = $classdate.find("class").attr('classLevel'); 
       var time = $classdate.find("time").text(); 
       var duration = $classdate.find("time").attr("duration"); 
       var hourofday = $classdate.find("time").attr("hourofday"); 
       var location = $classdate.find("location").text(); 



      var Monhtml = '<div class="classBlock">'; 

      Monhtml += '<p class="title">' + title + '<span class="loadingPic" alt="Loading" /> ' + ' </p>'; 
       Monhtml += '<p class="infoBar"> <strong>Time:</strong>' + time + '<span class="hour">'+ hourofday +'</span><br>'+'<strong>Duration:</strong>' + duration +' Minutes <br>' + '<strong>Location:</strong>' + location + '<br><strong>Instructor:</strong> </p>'; 
       Monhtml += '<p class="description"> <span class="level">' + level + '</span></p>' ; 

      Monhtml += '</div>'; 


      $('#classContainer').append($(Monhtml)); 
     }); 
     } 
    }); 
}); 
+0

Cela ne fonctionne pas J'ai également essayé Data. – matthewb

+0

Essayez $ (resp) .find ... à la place. Je ne peux pas répondre complètement maintenant à partir de l'iphone – karim79

+0

@mathewb - désolé pour le retard, la différence est qu'une fois la réponse a été enveloppée dans un objet jQuery vous pouvez appeler les méthodes jQuery sur elle. J'ai reflété la suggestion que j'ai faite dans mon dernier commentaire dans ma réponse. – karim79

0

Le complet rappel est transmis deux args.

De la documentation Jquery

Une fonction à appeler lorsque les finitions de demande (après callbacks de succès et d'erreur sont exécutés). La fonction reçoit deux arguments: L'objet XMLHttpRequest et une chaîne décrivant le type de succès de la requête. Ceci est un événement Ajax.

fonction (XMLHttpRequest, textStatus) { this; // les options pour cette requête ajax }