Mysql
 sql >> Base de données >  >> RDS >> Mysql

Passer un tableau de PHP à Javascript en utilisant JQuery &JSON

Je pense que votre PHP renvoie une erreur, plutôt que le JSON que vous attendez. Puisque vous avez dataType: 'json' , jQuery tente d'analyser la réponse, mais échoue. Lorsque cela se produit, jQuery n'appelle pas le success rappel.

Si vous le pouvez, utilisez Firebug pour voir ce qui est renvoyé par l'appel ajax. Une autre façon serait de passer temporairement à dataType: 'html' puis modifiez votre success rappel à :

success: function(msg) { alert(msg); }

Espérons que lorsque vous verrez le message renvoyé, cela vous aidera à identifier le problème. Une chose que vous devriez faire cependant est d'ajouter du code pour gérer les cas où la requête ne s'exécute pas et où aucune ligne n'est extraite de la base de données. Vous pouvez ajouter le code suivant au fichier PHP :

$result = mysql_query($query, $con);

if (!$result) {
    die('Could not run query: ' . mysql_error($con));
}

if (mysql_num_rows($result) < 1) {
    echo 'null';
    exit;
}

$data = mysql_fetch_row($result);

Il y a aussi quelques problèmes avec l'appel Ajax :

(1) Vous spécifiez contentType: "application/json; charset=utf-8" , mais vous n'envoyez pas de JSON. Vous devriez faire quelque chose comme ceci :

data: JSON.stringify({}),

Mais si vous faites cela, vous ne pouvez pas obtenir les données sur le serveur en utilisant le $_POST fonction. Par conséquent, vous voudrez peut-être vous débarrasser du contentType réglage à la place. Voir cette réponse SO pour plus d'informations.

(2) Lorsque vous spécifiez dataType: 'json' , JQuery analysera la réponse à un objet avant d'appeler le rappel de réussite, donc le msg Le paramètre doit déjà être un objet. Par conséquent, vous ne devez pas appeler JSON.parse(msg) .

(3) Vous renvoyez un tableau associatif à partir du fichier PHP. Cela sera converti en objet JavaScript, pas en tableau.

Je pense que vous devriez essayer ce qui suit :

$.ajax('refreshData.php', {
    type: 'post',
    dataType: 'json',
    data: { },
    cache: false,
    success: function (data) {
        if (data) {
            $('#interface_stats').html('Fatigue: ' + data.fatigue);
        }
    }
});