Mysql
 sql >> Database >  >> RDS >> Mysql

Passaggio di un array da PHP a Javascript utilizzando JQuery e JSON

Penso che il tuo PHP restituisca un errore, piuttosto che il JSON che ti aspetti. Dal momento che hai dataType: 'json' , jQuery tenta di analizzare la risposta, ma non riesce. Quando ciò accade, jQuery non chiama il success richiamata.

Se puoi, usa Firebug per vedere cosa viene restituito dalla chiamata ajax. Un altro modo sarebbe cambiare temporaneamente in dataType: 'html' e poi cambia il tuo success richiamata a:

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

Si spera che quando vedrai il messaggio restituito, aiuterà a identificare il problema. Una cosa che dovresti fare, però, è aggiungere codice per gestire i casi in cui la query non viene eseguita e in cui nessuna riga viene recuperata dal database. Puoi aggiungere il seguente codice al file 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);

Tuttavia, ci sono anche alcuni problemi con la chiamata Ajax:

(1) Stai specificando contentType: "application/json; charset=utf-8" , ma non stai inviando JSON. Dovresti fare qualcosa del genere:

data: JSON.stringify({}),

Ma se lo fai, non puoi ottenere i dati sul server usando il $_POST funzione. Pertanto, potresti voler eliminare il contentType impostazione invece. Vedi questa risposta SO per ulteriori informazioni.

(2) Quando specifichi dataType: 'json' , JQuery analizzerà la risposta a un oggetto prima di chiamare il callback di successo, quindi il msg parametro dovrebbe essere già un oggetto. Pertanto, non dovresti chiamare JSON.parse(msg) .

(3) Stai restituendo un array associativo dal file PHP. Verrà convertito in un oggetto JavaScript, non in un array.

Penso che dovresti provare quanto segue:

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