Come analizzare i dati JSON con jQuery / JavaScript?


190

Ho una chiamata AJAX che restituisce alcuni JSON in questo modo:

$(document).ready(function () {
    $.ajax({ 
        type: 'GET', 
        url: 'http://example/functions.php', 
        data: { get_param: 'value' }, 
        success: function (data) { 
            var names = data
            $('#cand').html(data);
        }
    });
});

All'interno del #canddiv riceverò:

[ { "id" : "1", "name" : "test1" },
  { "id" : "2", "name" : "test2" },
  { "id" : "3", "name" : "test3" },
  { "id" : "4", "name" : "test4" },
  { "id" : "5", "name" : "test5" } ]

Come posso scorrere questi dati e posizionare ciascun nome in un div?

Risposte:


283

Supponendo che lo script lato server non imposti l' Content-Type: application/jsonintestazione di risposta corretta , sarà necessario indicare a jQuery che si tratta di JSON utilizzando il dataType: 'json'parametro

Quindi è possibile utilizzare la $.each()funzione per scorrere tra i dati:

$.ajax({ 
    type: 'GET', 
    url: 'http://example/functions.php', 
    data: { get_param: 'value' }, 
    dataType: 'json',
    success: function (data) { 
        $.each(data, function(index, element) {
            $('body').append($('<div>', {
                text: element.name
            }));
        });
    }
});

o usa il $.getJSONmetodo:

$.getJSON('/functions.php', { get_param: 'value' }, function(data) {
    $.each(data, function(index, element) {
        $('body').append($('<div>', {
            text: element.name
        }));
    });
});

successo. Grazie. Devo inviare json pr posso inviare qualcosa dalla mia funzione php?
Patrioticcow,

7
@Patrioticcow, puoi anche inviare JSON. In questo caso è necessario impostare l' contentType: 'application/json'impostazione nella vostra $.ajaxfunzione e JSON serializzare il dataparametro, come quella: data: JSON.stringify({ get_param: 'value' }). Quindi nel tuo script php dovresti decodificare json per recuperare l'oggetto originale.
Darin Dimitrov,

Che cos'è questa "funzione svolta:"? È lo stesso del "successo"? Non lo vedo nei documenti.
Buttle Butkus,

I miei dati json sono {"0":{"level1":"done","level2":"done","level3":"no"}}come posso estrarli in ogni variabile? ho provato in questo modo usando il $.eachmetodo ma restituisce var indefinitolevel1 = ele[0].level1;
151291

@DarinDimitrov Come mostrare questi dati in un bootstrap carosello?
nideba,

79

L'impostazione dataType:'json'analizzerà JSON per te:

$.ajax({
  type: 'GET',
  url: 'http://example/functions.php',
  data: {get_param: 'value'},
  dataType: 'json',
  success: function (data) {
    var names = data
    $('#cand').html(data);
  }
});

Oppure puoi usare parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

Quindi è possibile ripetere quanto segue:

var j ='[{"id":"1","name":"test1"},{"id":"2","name":"test2"},{"id":"3","name":"test3"},{"id":"4","name":"test4"},{"id":"5","name":"test5"}]';

... utilizzando $().each:

var json = $.parseJSON(j);
$(json).each(function (i, val) {
  $.each(val, function (k, v) {
    console.log(k + " : " + v);
  });
}); 

JSFiddle


i miei dati json sono {"0":{"level1":"done","level2":"done","level3":"no"}}come posso estrarli in ogni variabile? ho provato in questo modo usando il $.eachmetodo ma restituisce var indefinitolevel1 = ele[0].level1;
151291

1
@ 151291 non è un modo corretto di porre la tua domanda, comunque ecco il violino jsfiddle.net/fyxZt/1738 per il tuo json. Notazione della matrice notajson[0]
Rafay

Grazie. risposta utile. Come ottenere il valore di colonna specificato in una tabella db?
PHPFan

@PHP Vuoi dire come interrogare la tabella del database? si prega di fornire ulteriori informazioni e consiglierei di porre una nuova domanda, con i dettagli necessari inclusi.
Rafay,

@Rafay ad esempio in questa domanda se voglio ottenere solo i valori del nome
PHPFan

24

Prova il seguente codice, funziona nel mio progetto:

//start ajax request
$.ajax({
    url: "data.json",
    //force to handle it as text
    dataType: "text",
    success: function(data) {

        //data downloaded so we call parseJSON function 
        //and pass downloaded data
        var json = $.parseJSON(data);
        //now json variable contains data in json format
        //let's display a few items
        for (var i=0;i<json.length;++i)
        {
            $('#results').append('<div class="name">'+json[i].name+'</>');
        }
    }
});

11
 $(document).ready(function () {
    $.ajax({ 
        type: 'GET', 
        url: '/functions.php', 
        data: { get_param: 'value' }, 
        success: function (data) { 
         for (var i=0;i<data.length;++i)
         {
         $('#cand').append('<div class="name">data[i].name</>');
         }
        }
    });
});

6

Usa quel codice.

     $.ajax({

            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "Your URL",
            data: "{}",
            dataType: "json",
            success: function (data) {
                alert(data);
            },
            error: function (result) {
                alert("Error");
            }
        });

5

ok ho avuto lo stesso problema e lo risolvo in questo modo rimuovendo []da [{"key":"value"}]:

  1. nel tuo file php assicurati di stampare in questo modo
echo json_encode(array_shift($your_variable));
  1. nella tua funzione di successo fallo
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

e anche tu puoi farlo in loop se vuoi


5

Sono d'accordo con tutte le soluzioni di cui sopra, ma per sottolineare qual è la causa principale di questo problema, che il ruolo principale in tutto il codice sopra è questa linea di codice:

dataType:'json'

quando si perde questa riga (che è facoltativa), i dati restituiti dal server vengono trattati come stringa a lunghezza intera (che è il tipo restituito predefinito). L'aggiunta di questa riga di codice informa jQuery di convertire la possibile stringa json in oggetto json.

Eventuali chiamate jQuery ajax devono specificare questa linea, se si prevede un oggetto dati json.


3
var jsonP = "person" : [ { "id" : "1", "name" : "test1" },
  { "id" : "2", "name" : "test2" },
  { "id" : "3", "name" : "test3" },
  { "id" : "4", "name" : "test4" },
  { "id" : "5", "name" : "test5" } ];

var cand = document.getElementById("cand");
var json_arr = [];
$.each(jsonP.person,function(key,value){
    json_arr.push(key+' . '+value.name  + '<br>');
    cand.innerHTML = json_arr;
});

<div id="cand">
</div>

2

Dati Json

data = {"clo":[{"fin":"auto"},{"fin":"robot"},{"fin":"fail"}]}

Quando recuperare

$.ajax({
  //type
  //url
  //data
  dataType:'json'
}).done(function( data ) {
var i = data.clo.length; while(i--){
$('#el').append('<p>'+data.clo[i].fin+'</>');
}
});

0
$.ajax({
  url: '//.xml',
  dataType: 'xml',
  success: onTrue,
  error: function (err) {
      console.error('Error: ', err);
  }
});

$('a').each(function () {
  $(this).click(function (e) {
      var l = e.target.text;
      //array.sort(sorteerOp(l));
      //functionToAdaptHtml();
  });
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.