Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Übergeben eines Arrays von PHP an Javascript mit JQuery &JSON

Ich denke, Ihr PHP gibt einen Fehler zurück und nicht den JSON, den Sie erwarten. Da Sie dataType: 'json' haben , jQuery versucht, die Antwort zu parsen, schlägt jedoch fehl. In diesem Fall ruft jQuery den success nicht auf Rückruf.

Wenn Sie können, verwenden Sie Firebug, um zu sehen, was vom Ajax-Aufruf zurückgegeben wird. Eine andere Möglichkeit wäre, vorübergehend zu dataType: 'html' zu wechseln und ändern Sie dann Ihren success Rückruf an:

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

Wenn Sie sehen, dass die Nachricht zurückgegeben wird, hilft dies hoffentlich dabei, das Problem zu identifizieren. Eine Sache, die Sie jedoch tun sollten, ist, Code hinzuzufügen, um die Fälle zu behandeln, in denen die Abfrage nicht ausgeführt werden kann und keine Zeile aus der Datenbank abgerufen wird. Sie könnten der PHP-Datei den folgenden Code hinzufügen:

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

Es gibt jedoch auch ein paar Probleme mit dem Ajax-Aufruf:

(1) Sie geben contentType: "application/json; charset=utf-8" an , aber dann senden Sie kein JSON. Sie sollten etwa so vorgehen:

data: JSON.stringify({}),

Aber wenn Sie dies tun, können Sie die Daten nicht mit dem $_POST auf den Server bekommen Funktion. Daher sollten Sie den contentType loswerden Einstellung statt. Siehe diese SO-Antwort für weitere Informationen.

(2) Wenn Sie dataType: 'json' angeben , analysiert JQuery die Antwort auf ein Objekt, bevor es den Erfolgs-Callback aufruft, also msg Parameter sollte bereits ein Objekt sein. Daher sollten Sie JSON.parse(msg) nicht aufrufen .

(3) Sie geben ein assoziatives Array aus der PHP-Datei zurück. Das wird in ein JavaScript-Objekt konvertiert, nicht in ein Array.

Ich denke, Sie sollten Folgendes versuchen:

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