211

I have a AJAX call that returns some JSON like this:

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

Inside the #cand div I'll get:

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

How can I loop through this data and place each name in a div?

Brett DeWoody
  • 59,771
  • 29
  • 135
  • 184
Patrioticcow
  • 26,422
  • 75
  • 217
  • 337

11 Answers11

306

Assuming your server side script doesn't set the proper Content-Type: application/json response header you will need to indicate to jQuery that this is JSON by using the dataType: 'json' parameter.

Then you could use the $.each() function to loop through the data:

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

or use the $.getJSON method:

$.getJSON('/functions.php', { get_param: 'value' }, function(data) {
    $.each(data, function(index, element) {
        $('body').append($('<div>', {
            text: element.name
        }));
    });
});
Dave
  • 10,748
  • 3
  • 43
  • 54
Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928
  • success. thanks. DO i have to send json pr i can send anything from my php function? – Patrioticcow Jan 21 '12 at 09:14
  • 8
    @Patrioticcow, you can send JSON as well. In this case you will need to set the `contentType: 'application/json'` setting in your `$.ajax` function and JSON serialize the `data` parameter, like that: `data: JSON.stringify({ get_param: 'value' })`. Then in your php script you would need to json decode to get back the original object. – Darin Dimitrov Jan 21 '12 at 09:16
  • What is this "done: function"? Is that the same as "success"? I don't see it in the docs. – Buttle Butkus Sep 30 '14 at 22:34
  • My json data is `{"0":{"level1":"done","level2":"done","level3":"no"}}` how can extract this into each variables? i tried like this using `$.each` method but returns undefined var `level1 = ele[0].level1;` – 151291 Feb 05 '16 at 05:53
  • @DarinDimitrov How to show these data in a carousel bootstrap ? – TheCoderGuy Sep 23 '19 at 13:25
  • so if the server side sets Content-Type: `application/json` then does it get auto converted to a JS object? – R.S.K Apr 19 '23 at 07:02
91

Setting dataType:'json' will parse JSON for you:

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

Or else you can use parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

Then you can iterate the following:

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

...by using $().each:

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

JSFiddle

daaawx
  • 3,273
  • 2
  • 17
  • 16
Rafay
  • 30,950
  • 5
  • 68
  • 101
  • my json data is `{"0":{"level1":"done","level2":"done","level3":"no"}}` how can extract this into each variables? i tried like this using `$.each` method but returns undefined var `level1 = ele[0].level1;` – 151291 Feb 05 '16 at 05:55
  • 1
    @151291 thats not a proper way to ask your question, anyway here is the fiddle http://jsfiddle.net/fyxZt/1738/ for your json. Note array notation `json[0]` – Rafay Feb 06 '16 at 12:05
  • Thank you. helpful answer. How to get specified column value in a db table ? – PHPFan Aug 03 '19 at 09:51
  • @PHPFan you mean how to query database table? please provide more information and i would recommend asking a new question, with necessary details included. – Rafay Aug 03 '19 at 21:31
  • @Rafay for example in this question if I want to get the name values only – PHPFan Aug 04 '19 at 04:39
30

Try following code, it works in my project:

//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+'</>');
        }
    }
});
leo.fcx
  • 6,137
  • 2
  • 21
  • 37
12
 $(document).ready(function () {
    $.ajax({ 
        url: '/functions.php', 
        type: 'GET',
        data: { get_param: 'value' }, 
        success: function (data) { 
         for (var i=0;i<data.length;++i)
         {
         $('#cand').append('<div class="name">data[i].name</>');
         }
        }
    });
});
6

Use that 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
  • 4,496
  • 2
  • 23
  • 24
6

ok i had the same problem and i fix it like this by removing [] from [{"key":"value"}]:

  1. in your php file make shure that you print like this
echo json_encode(array_shift($your_variable));
  1. in your success function do this
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

and also you can loop it if you want

elaz
  • 121
  • 1
  • 5
6

I agree with all the above solutions, but to point out whats the root cause of this issue is, that major role player in all above code is this line of code:

dataType:'json'

when you miss this line (which is optional), the data returned from server is treated as full length string (which is default return type). Adding this line of code informs jQuery to convert the possible json string into json object.

Any jQuery ajax calls should specify this line, if expecting json data object.

justnajm
  • 4,422
  • 6
  • 36
  • 56
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>
3

Json data

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

When retrieve

$.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
  • 182
  • 1
  • 12
3

Here's how you would do this in JavaScript, this is a really efficient way to do it!

let data = '{ "name": "mark"}'
let object = JSON.parse(data);
console.log(object.name);

this would print mark

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