Le problème auquel je suis confronté est que lorsque je passe un tableau d'un fichier PHP à un autre fichier javascript en utilisant Ajax, j'obtiens une entrée correcte mais la longueur du tableau est incorrecte. Je ne sais pas ce que je fais mal. Ce sont mes deux fichiers un peu de code.

Firstfile.php:

function check()
{ 

xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange = function()
{
   if(xmlhttp.readyState==4 && xmlhttp.status==200)
   { 
        graphData=xmlhttp.responseText;

        alert(graphData); 
        // getting alert [["01_Mar_2016",38430],["02_Mar_2016",97183],["03_Mar_2016",107122]]
       alert(graphData.length);
      //getting alert 68 but it should be 3 
   }
   else if(xmlhttp.status==404)
   {
        graphData="File not found";
   }
 }
 xmlhttp.open("GET","SeocndFile.php",true);
 xmlhttp.send();
}

SeocndFile.php

while($result = mysql_fetch_assoc($qryResult))
{  
   $data[] = array((string)$result['mimiDate'], (int)$result['sumMimi']);
}

print json_encode($data);
//print like this[["01_Mar_2016",38430],["02_Mar_2016",97183],["03_Mar_2016",107122]]
//which is correct.
0
M Talha Afzal 5 mars 2016 à 20:41

3 réponses

Meilleure réponse

responseText est une chaîne. Vous devez le convertir en tableau à l'aide de JSON.parse()

var graphData=JSON.parse(xmlhttp.responseText);

Pour être sûr, vous devez l'envelopper dans un bloc try / catch ou si vous utilisez jQuery, puis convertir en utilisant $.getJSON() et ajouter un gestionnaire d'erreurs

$.getJSON('SeocndFile.php')
   .done(graphData){
     alert(graphData.length);
   })
   .fail(function(err){
      console.log(err);
      alert('Ooops...something went wrong');
   });
2
charlietfl 5 mars 2016 à 18:37

Il affiche la longueur de la chaîne car responseText est une chaîne, donc la longueur renvoie le nombre de caractères.

Vous devez d'abord analyser la chaîne en JSON:

alert(JSON.parse(xmlhttp.responseText).length);
1
Zaheer Ahmed 5 mars 2016 à 18:33

Comme mentionné ci-dessus, vérifiez le type de données que vous recevez, sous forme de chaîne.

Il est fortement recommandé pour les appels ajax d'utiliser Jquery car vous pouvez obtenir les données dans un format beaucoup plus pratique lorsque les réponses sont JSON.

Un exemple de code utilisant jquery est:

$.get('SeocndFile.php').done(function(data)
{
   //do stuff here when sucessfuly retrieve the data
})
.fail(function()
{
   //Do stuff when 404 or 500
});

Voici la documentation sur son utilisation: http://api.jquery.com/jQuery.get/

De même, vous pouvez utiliser $ .post () pour les actions de publication HTTP.

0
Dimitrios Desyllas 5 mars 2016 à 19:09