2011-10-24 9 views
0

je le code suivant:jquery ajax succès difficulté de rappel

Du côté serveur
@{ 
    ViewBag.Title = "Index"; 
} 
<h2> 
    Index</h2> 
<div data-role="page"> 
    <div data-role="header"> 
     ...</div> 
    <div data-role="content"> 
     <a id="btnShowCustomers" data-role="button" href="#secondDiv"></a> 
    </div> 
    <div data-role="footer"> 
     ...</div> 
</div> 
<div id="secondDiv" data-role="page"> 
    <div id="list" data-role="content"> 
    </div> 
</div> 
<div id="customerDetailsDiv" data-role="page"> 
    <div data-role="content"> 
    </div> 
</div> 
<script type="text/javascript"> 
    $(document).ready(function (event) { 
     $('#btnShowCustomers').bind('vclick', function (event) { 
      GetCustomers(); 
     }); 
    }); 

    function GetCustomers() { 
     var webMethod = "Home/GetCustomers"; 
     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: webMethod, 
      data: "{}", 
      dataType: "json", 
      success: function (dataObj) { 
       $(dataObj).each(function() { 
        if ($(this).CanConsume) { 
         alert('can consume'); 
         $('<a href="#" data-date="' + $(this).DateActivated + '" data-id="' + $(this).ID + '">' + $(this).Name + '</a>').appendTo('#list'); 
        } 
       }) 
      } 
     }); 
    } 
</script> 

Je retourne une liste d'objets clients. Le client a les propriétés suivantes:

  • ID
  • CanConsume (bool)
  • Nom
  • DateActivated

Je veux itérer l'ensemble retourné de résultats et de construire des éléments d'ancrage et les ajouter à une div liste nommée . Avez-vous une idée de pourquoi cela ne fonctionne pas? Je n'ai pas d'erreurs javascript.

+0

Votre code sera obtenir beaucoup plus propre et moins sujette aux erreurs si vous laissez le travail de construction html sale javascript bibliothèque Templating. – saintedlama

Répondre

1

jQuery tue les erreurs ... malheureusement.

Si cela ne fonctionne pas, veuillez publier un fichier JSON.

sacrément rapide à, encore une fois:

$.each(dataObj, function (index, element) { 
    if (element.CanConsume) { 
      alert('can consume'); 
      $('<a href="#" data-date="' + element.DateActivated + '" data-id="' + element.ID + '">' + element.Name + '</a>').appendTo('#list'); 
     } 
}); 
1

dataObj est une liste normale d'objets JavaScript simples (JSON). N'utilisez pas jQuery pour itérer sur jQuery.each (...) itère sur les éléments DOM.

Juste essayer

... 
    success: function(dataObj){ 
     for(var i=0; i < dataObj.length; i++){ 
     var obj = dataObj[i]; 
      if (obj.CanConsume) { 
       alert('can consume'); 
       ... 
      } 
     } 
    } 

Cela devrait fonctionner.

Sinon, essayez Firebug ou les Outils de développement Chrome pour inspecter la réponse ou pour définir un point d'arrêt dans votre rappel de succès. Cela devrait vous donner assez d'informations pour résoudre le problème.

+0

Votre réponse était correcte. Je pensais que $ .each() peut être utilisé pour interroger n'importe quoi :) Je marquerai votre réponse comme correcte dès que 6 minutes expirent. Merci d'avoir pris le temps de répondre à ma question! – Dragan

+0

il y a un $ ('li'). Each() et un $ .each, http://api.jquery.com/jQuery.each/. – FloydThreepwood

+0

@FloydThreepwood vous avez raison, oui. – Juri

Questions connexes