2009-12-16 27 views
2

J'ai un problème particulier avec l'obtention d'un nombre entier à partir d'une réponse ajax. À chaque fois que j'appelle le code suivant, parseInt (data) renvoie NaN malgré le fait que les données soient une chaîne.ParseInt ne fonctionne pas sur la réponse Jquery ajax

function poll() { 
    $.ajax({ 
     type: "GET", 
     dataType: "html", 
     url: 'images/normal/' + userId + '/' + saveCode + 'progress.txt', 
     error: function() {poll();}, 
     success: function(data) { 
     // Change the text 
     $('#loading_text').html(data + '% complete'); 
     // Change the loading bar 
     max = 357; 
     current_percent = parseInt(data); // returns NaN 
     $('loading_bar').width(Math.round(max * (current_percent/100))); 
     // Call the poll again in 2 seconds 
     if (loaded != true) 
      { 
      setTimeout(poll, 2000); 
      } 
     } 
    }); 
} 

En Firebug, typeof (données) est une chaîne et des données = "89" (ou un autre numéro 1-100) mais il ne fonctionne toujours pas. Des indices?

Répondre

2
data="89" 
typeof(data) //is string 
typeof(+data) //is number 

vous pouvez donc aussi essayer avec le signe Plus +, au lieu d'utiliser parseInt

Un autre avec le signe + et parseInt pour autant que je sais est quand vous analysez une chaîne vide ou un espace, parseInt return NaN, et + renvoie 0

+0

typeof (+ données) retourne nombre, mais seulement + données sur ses propres retours NaN – Lobe

+0

Pouvez-vous faire alerte (data.length)? Je pense que vous avez des non-chiffres avant "89". – YOU

+0

Cela fait beaucoup plus de sens maintenant. data.length = 211. Cela est probablement dû à mon code php qui met à jour le fichier texte 105 fois pour fournir des mises à jour de progression, donc il ne nettoie pas correctement le fichier. Quel est le meilleur moyen de résoudre ce problème? Je pensais que les fonctions de trim auraient travaillé – Lobe

0

Essayez de parcourir chaque caractère de la chaîne par programme, peut-être qu'il y a un caractère non imprimable qui empêche l'exécution de parseInt.

+1

Un moyen facile de faire cela est d'imprimer encodeURIComponent (données) - il devrait afficher tous les caractères non imprimables codés en url. – Annie

3

Etes-vous sûr que les données sont exactement "89"? Si le premier caractère non-espace dans la chaîne ne peut pas être converti en un nombre, parseInt() renvoie NaN.

De même, il est recommandé de spécifier la base avec parseInt pour forcer la conversion que vous recherchez. Essayez parseInt(data, 10).

+0

+1 pour commenter re: fournir la base 10 radix – Funka

+0

J'ai essayé parseInt (données, 10) mais il n'y avait pas de différence. En ce qui concerne les espaces, j'ai regardé tous les personnages et je n'ai rien trouvé d'étrange. Je l'ai passé à travers la fonction de compensation trouvée sur webtoolkit.info/javascript-trim.html et cela n'a pas aidé. Cela devient très frustrant – Lobe