Как обрабатывать и выводить правильный массив JSON - PullRequest
1 голос
/ 28 августа 2011

Мой запрос ajax выглядит следующим образом:

$.post('newsletter.php?mode=grab', { search: searchstring }, function(data) {
    $('#newsletter_receivers').html(
            data
    );
});

Вывод этого: (data)

{"id":"111","fullname":"Test Test","age":"31"}{"id":"112","fullname":"Max Max","age":"31"}{"id":"113","fullname":"123 123","age":"31"}{"id":"114","fullname":"Det Fungerar","age":"31"}

Теперь это просто помещение этого json в элемент div.

Но как мне извлечь каждый массив json и вывести полное имя и возраст?

Таким образом, он будет выглядеть так:

Test Test - 31
Max max - 31

Ответы [ 4 ]

1 голос
/ 28 августа 2011

Если ваш действительный json выглядит как

[{"id":"111","fullname":"Test Test","age":"31"},{"id":"112","fullname":"Max Max","age":"31"},{"id":"113","fullname":"123 123","age":"31"},{"id":"114","fullname":"Det Fungerar","age":"31"}]

, вы можете использовать

$.post('newsletter.php?mode=grab', { search: searchstring }, function(data) {
    data = $.parseJSON(data);
    $.each(data, function(index,b){
       $('#newsletter_receivers').append('<br>'+b.fullname+' - '+b.age);
    });
});
0 голосов
/ 28 августа 2011

Я исправил ваш json, который недействителен Вы могли бы сделать:

var json = [
    {
    "id": "111",
    "fullname": "Test Test",
    "age": "31"},
{
    "id": "112",
    "fullname": "Max Max",
    "age": "31"},
{
    "id": "113",
    "fullname": "123 123",
    "age": "31"},
{
    "id": "114",
    "fullname": "Det Fungerar",
    "age": "31"}
];
var text = '';
$.each(json, function(index, b) {
    text += b.fullname + ' - ' + b.age + '<br/>';
});

$('#newsletter_receivers').html(text);

скрипка здесь:

http://jsfiddle.net/4crnm/

для вашего примера:

$.post('newsletter.php?mode=grab', { search: searchstring }, function(data) {
    data = $.parseJSON(data);
    var text = '';
    $.each(data, function(index, b) {
        text += b.fullname + ' - ' + b.age + '<br/>';
    });
    $('#newsletter_receivers').html(text);
});
0 голосов
/ 28 августа 2011

Это не допустимый JSON.Вам нужно будет превратить его в массив или что-то.Если вы не можете сделать это на стороне сервера, попробуйте следующее:

$.post('newsletter.php?mode=grab', { search: searchstring }, function(data){
    $('#newsletter_receivers').html('');
    $.each($.parseJSON('['+data.replace(/\}\{/g, '},{')+']'), function(){
        $('#newsletter_receivers').append('<div>'+this.fullname+' - '+this.age+'</div>');
    });
});

Если вы можете исправить это на стороне сервера, это было бы намного лучшим решением.

0 голосов
/ 28 августа 2011

измени свой Джейсон на что-то вроде

{
    "data": [
        {
            "id": "111",
            "fullname": "Test Test",
            "age": "31"
        },
        {
            "id": "112",
            "fullname": "Max Max",
            "age": "31"
        },
        {
            "id": "113",
            "fullname": "123 123",
            "age": "31"
        },
        {
            "id": "114",
            "fullname": "Det Fungerar",
            "age": "31"
        }
    ]
}

и доступ к нему, как,

$(function(){
 $.post("path/to/json",function(data){
  $(data.data).each(function(i,j){
  alert(data.data[i].fullname);
  });
  },'json');
});

когда вы указываете dataType как json, вам не нужно делать $.parseJSON, также вы можете проверить свой JSON на www.jsonlint.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...