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);
}
}
});