Wie analysiere ich JSON-Daten mit jQuery / JavaScript?

190

Ich habe einen AJAX-Aufruf, der JSON wie folgt zurückgibt:

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

In der #candDiv bekomme ich:

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

Wie kann ich diese Daten durchlaufen und jeden Namen in ein div einfügen?

Patriotische Kühe
quelle

Antworten:

281

Angenommen, Ihr serverseitiges Skript legt nicht den richtigen Content-Type: application/jsonAntwortheader fest, müssen Sie jQuery mithilfe des dataType: 'json'Parameters mitteilen, dass dies JSON ist.

Dann könnten Sie die verwenden $.each() Funktion verwenden, um die Daten zu durchlaufen:

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

oder verwenden Sie die $.getJSONMethode:

$.getJSON('/functions.php', { get_param: 'value' }, function(data) {
    $.each(data, function(index, element) {
        $('body').append($('<div>', {
            text: element.name
        }));
    });
});
Darin Dimitrov
quelle
Erfolg. Vielen Dank. Muss ich json pr senden Ich kann alles von meiner PHP-Funktion senden?
Patrioticcow
7
@Patrioticcow, Sie können auch JSON senden. In diesem Fall müssen Sie die contentType: 'application/json'Einstellung in Ihrer $.ajaxFunktion festlegen und JSON den dataParameter wie folgt serialisieren : data: JSON.stringify({ get_param: 'value' }). Dann müssten Sie in Ihrem PHP-Skript json decodieren, um das ursprüngliche Objekt zurückzugewinnen.
Darin Dimitrov
Was ist das "erledigt: Funktion"? Ist das dasselbe wie "Erfolg"? Ich sehe es nicht in den Dokumenten.
Buttle Butkus
Meine json-Daten sind, {"0":{"level1":"done","level2":"done","level3":"no"}}wie kann dies in jede Variable extrahiert werden? Ich habe versucht, wie mit $.eachMethode, aber gibt undefinierte var zurücklevel1 = ele[0].level1;
151291
@DarinDimitrov Wie werden diese Daten in einem Karussell-Bootstrap angezeigt?
Nideba
79

Durch die Einstellung dataType:'json'wird JSON für Sie analysiert:

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

Oder Sie können verwenden parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

Dann können Sie Folgendes wiederholen:

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

... mit $().each:

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

JSFiddle

Rafay
quelle
Meine JSON-Daten sind, {"0":{"level1":"done","level2":"done","level3":"no"}}wie kann dies in jede Variable extrahiert werden? Ich habe versucht, wie mit $.eachMethode, aber gibt undefinierte var zurücklevel1 = ele[0].level1;
151291
1
@ 151291 das ist kein richtiger Weg, um deine Frage zu stellen, hier ist die Geige jsfiddle.net/fyxZt/1738 für deinen json. Beachten Sie die Array-Notationjson[0]
Rafay
Danke dir. hilfreiche Antwort. Wie erhalte ich den angegebenen Spaltenwert in einer DB-Tabelle?
PHPFan
@PHPFan meinst du, wie man Datenbanktabelle abfragt? Bitte geben Sie weitere Informationen an und ich würde empfehlen, eine neue Frage mit den erforderlichen Details zu stellen.
Rafay
@ Rafay zum Beispiel in dieser Frage, wenn ich nur die
Namenswerte erhalten
24

Versuchen Sie folgenden Code, es funktioniert in meinem Projekt:

//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+'</>');
        }
    }
});
Sarabhaiah Polakam
quelle
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</>');
         }
        }
    });
});
Mohammed Abdelrasoul
quelle
6

Verwenden Sie diesen Code.

     $.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");
            }
        });
Shivam Srivastava
quelle
5

ok ich hatte das gleiche problem und ich behebe es so indem ich es entferne []von [{"key":"value"}]:

  1. Stellen Sie in Ihrer PHP-Datei sicher, dass Sie so drucken
echo json_encode(array_shift($your_variable));
  1. Tun Sie dies in Ihrer Erfolgsfunktion
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

und Sie können es auch schleifen, wenn Sie möchten

elaz
quelle
5

Ich stimme allen oben genannten Lösungen zu, aber um darauf hinzuweisen, was die Hauptursache für dieses Problem ist, ist diese Codezeile der Hauptakteur in allen oben genannten Codes:

dataType:'json'

Wenn Sie diese Zeile verpassen (optional), werden die vom Server zurückgegebenen Daten als Zeichenfolge in voller Länge behandelt (dies ist der Standardrückgabetyp). Durch Hinzufügen dieser Codezeile wird jQuery angewiesen, die mögliche JSON-Zeichenfolge in ein JSON-Objekt zu konvertieren.

Alle jQuery-Ajax-Aufrufe sollten diese Zeile angeben, wenn ein json-Datenobjekt erwartet wird.

justnajm
quelle
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>
Servesh Mishra
quelle
2

Json-Daten

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

Beim Abrufen

$.ajax({
  //type
  //url
  //data
  dataType:'json'
}).done(function( data ) {
var i = data.clo.length; while(i--){
$('#el').append('<p>'+data.clo[i].fin+'</>');
}
});
Guspan Tanadi
quelle
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();
  });
});
Sarah Smith
quelle