2010-03-22 6 views
2

Je me suis tiré les cheveux au cours des dernières heures avec ce problème. Et le googling a été gêné par le flou même de cela. Alors laissez-moi m'excuser pour cela d'abord. Fondamentalement, j'utilise jquery et ajax (avec C#) pour retourner les données du backend et l'afficher à l'écran. Le code fonctionne parfaitement pour Firefox et IE. Mais quand les données deviennent trop grandes (??) (plus de 1500 lignes de tableau) tout ce que je reçois est un popup non défini.jquery Ajax appel résultant de l'erreur Undefined dans Firefox

Débogage dans firefox (3.6) il ne va même pas dans la méthode de succès. Pire encore, il ne va même pas dans la méthode de l'erreur. Beaucoup d'informations superflues, mais je préfère montrer tout ce que je fais.

Le code

$j.ajax(
     { 
      type: "POST", 
      url: "AdminDetails.aspx/LoadCallDetails", 
      data: "{" + data + "}", 
      contentType: "application/json;charset=utf-8", 
      dataType: "json",     
      success: function(msg) { 
       $j("#CallDetailsHolder").html(msg.d); 
       $j(".pointingHand").hide(); 

       var oTable = $j('#dt').dataTable({ 
        "bProcessing": true, 
        "bPaginate": true, 
        "bSort": true, 
        "bAutoWidth": false, 
        "aoColumns": [ 
         { "sType": 'html' }, 
         { "sType": 'custdate' }, 
         { "sType": 'html-numeric' }, 
         { "sType": 'ariary' }, 
         { "sType": 'html' }, 
         { "sType": 'html' } 
        ], 
        "oLanguage": { 
         "sProcessing": "Traitement...", 
         "sLengthMenu": "_MENU_ Montrer", 
         "sZeroRecords": "Aucun enregistrement", 
         "sInfo": "_START_ à _END_ de _TOTAL_", 
         "sInfoEmpty": "0 à 0 de 0", 
         "sInfoFiltered": "(filtrée à partir de _MAX_)", 
         "sInfoPostFix": "", 
         "sSearch": "Rechercher", 
         "sUrl": "", 
         "oPaginate": { 
          "sFirst": "premier", 
          "sPrevious": "Précédent", 
          "sNext": "suivant", 
          "sLast": "dernier" 
         } 
        }, 
        "sDom": 'T<"clear">lfrtip' 

       }); 

       $j('#CompteBlocRight0').unblock(); 

       $j('#btnRangeSearch').click(function() { oTable.fnDraw(); }); 

      }, 
      error: function(msg) { 
       DisplayError(msg); 
       $j('#CompteBlocRight0').unblock(); 
      } 
     });    //$.ajax 
    } 

Le code fonctionne vraiment. Et même affiche dans IE sans aucun problème.

Toute aide ???

+0

Avez-vous utilisé Firebug pour aider debug ce qui se passe? – Chris

+0

Oui, il rencontre la fonction d'erreur, parcourt un peu le fichier jQuery1.4.1. Mais alors ne frappe même pas ma méthode DisplayError que je trouve étrange. – Kamal

+0

Pouvez-vous dire si les données sont renvoyées correctement à partir du serveur? Avec FireBug, vous devriez être capable de regarder ce qui revient quel que soit le javascript. –

Répondre

0

Après un peu de creuser, cela semble être le problème.

Bugzilla

0

Comme il fonctionne avec de petits ensembles de données et qu'il échoue avec des ensembles de données volumineux, vous devez isoler un cas défaillant avec un ensemble de données volumineux. Utilisez l'onglet Net dans Firebug pour voir la réponse du serveur. Le statut 2xx devrait aller dans le gestionnaire de succès, tous les autres devraient aller dans le gestionnaire d'erreurs. Peut-être que votre serveur vomit d'une manière que le contrôle Ajax est confus?

Avec ce genre d'erreurs, il est souvent très utile pour simplifier votre code pour le débogage. Essayez ce code, les gestionnaires remplacés par des messages simples:

$j.ajax(
    { 
     type: "POST", 
     url: "AdminDetails.aspx/LoadCallDetails", 
     data: "{" + data + "}", 
     contentType: "application/json;charset=utf-8", 
     dataType: "json",     
     success: function(msg) { 
      console.log("in success handler"); 
     }, 
     error: function(xhr, textStatus, errorThrown) { 
      console.log("in error handler: "+textStatus); 
      console.dir(xhr); 
      console.dir(errorThrown); 
     } 
    });    //$.ajax 
} 

MISE À JOUR: la signature de votre gestionnaire d'erreur est incorrect. Mis à jour mon échantillon.

+0

BTW, votre serveur devrait renvoyer JSON. Vous avez mentionné "html" ... il ne retourne pas HTML, n'est-ce pas? Cuz qui pourrait être le problème. –

+0

Je viens de vérifier, 200 OK est revenu.Je suis seulement intéressé par le premier champ de la méthode d'erreur. J'ai remarqué que cela fonctionne bien comme une surcharge. – Kamal

+0

Vous obtenez un 200 mais la méthode d'erreur est toujours appelée? –

0

Vous avez défini votre jeu de caractères sur utf-8? Le mot clé qui déclenche une grande fenêtre peut-il être quelque chose que le serveur ne comprend pas?

Cet article est sur JSON/Ajax/UTF-8 en utilisant PHP, mais une lecture: http://particletree.com/notebook/json-ajax-and-utf8/

+0

J'en doute. Ce sont tous les chiffres qui sont passés dans ce cas. Aussi, cela n'expliquerait pas pourquoi cela fonctionne pour des valeurs plus petites. Les nombres étant passés sont le nombre de mois et le nombre de jours ainsi tomberont toujours entre 1-12 et 1-31 respectivement. Confirmé correct en cas d'échec aussi. Notez également que lorsque le débogage de l'appel se termine correctement sur le serveur et que je peux voir les données correctes dans le résultat. – Kamal

Questions connexes