jQuery loop over JSON wynik z sukcesu AJAX?

Na wywołaniu zwrotnym jQuery AJAX chcę zapętlić wyniki obiektu. To jest przykład jak wygląda odpowiedź w Firebug.

[
 {"TEST1":45,"TEST2":23,"TEST3":"DATA1"},
 {"TEST1":46,"TEST2":24,"TEST3":"DATA2"},
 {"TEST1":47,"TEST2":25,"TEST3":"DATA3"}
]

Jak mogę zapętlić wyniki, aby mieć dostęp do każdego z elementów? Próbowałem czegoś takiego jak poniżej, ale to nie wydaje się działać.

jQuery.each(data, function(index, itemData) {
  // itemData.TEST1
  // itemData.TEST2
  // itemData.TEST3
});
Author: Tomalak, 2009-04-09

10 answers

Możesz usunąć zewnętrzną pętlę i zastąpić this data.data:

$.each(data.data, function(k, v) {
    /// do stuff
});

Byłeś blisko:

$.each(data, function() {
  $.each(this, function(k, v) {
    /// do stuff
  });
});

Masz tablicę obiektów / map, więc zewnętrzna pętla iteruje nad nimi. Pętla wewnętrzna jest powtarzana nad właściwościami każdego elementu obiektu.

 225
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-05 12:57:09

Możesz również użyć funkcji getJSON :

    $.getJSON('/your/script.php', function(data) {
        $.each(data, function(index) {
            alert(data[index].TEST1);
            alert(data[index].TEST2);
        });
    });

To naprawdę tylko przeredagowanie odpowiedzi ifesdjeena, ale pomyślałem, że może to być pomocne dla ludzi.

 77
Author: clone45,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-01 20:36:13

Jeśli używasz Fire Fox, po prostu otwórz konsolę (użyj klawisza F12) i wypróbuj to:

var a = [
 {"TEST1":45,"TEST2":23,"TEST3":"DATA1"},
 {"TEST1":46,"TEST2":24,"TEST3":"DATA2"},
 {"TEST1":47,"TEST2":25,"TEST3":"DATA3"}
];

$.each (a, function (bb) {
    console.log (bb);
    console.log (a[bb]);
    console.log (a[bb].TEST1);
});

Hope it helps

 38
Author: 0100110010101,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-18 09:41:49

Dla kogokolwiek innego, to prawdopodobnie nie działa, ponieważ wywołanie ajax interpretuje zwrócone dane jako tekst - tzn. nie jest to jeszcze obiekt JSON.

Możesz przekonwertować go na obiekt JSON ręcznie za pomocą polecenia parseJSON lub po prostu dodając właściwość dataType: 'json' do wywołania ajax. np.

jQuery.ajax({
    type: 'POST',
    url: '<?php echo admin_url('admin-ajax.php'); ?>',
    data: data, 
    dataType: 'json', // ** ensure you add this line **
    success: function(data) {
        jQuery.each(data, function(index, item) {
            //now you can access properties using dot notation
        });
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert("some error");
    }
});
 14
Author: Dave Hilditch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-10 21:33:09

Uzyskaj dostęp do tablicy json tak jak każda inna tablica.

for(var i =0;i < itemData.length-1;i++)
{
  var item = itemData[i];
  alert(item.Test1 + item.Test2 + item.Test3);
}
 12
Author: Toby Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-30 08:58:48

Spróbuj jQuery.funkcja map , działa całkiem dobrze z mapami.

var mapArray = {
  "lastName": "Last Name cannot be null!",
  "email": "Email cannot be null!",
  "firstName": "First Name cannot be null!"
};

$.map(mapArray, function(val, key) {
  alert("Value is :" + val);
  alert("key is :" + key);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 4
Author: PanwarS87,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-30 15:36:06

Możesz również użyć funkcji getJSON:

$.getJSON('/your/script.php', function(data) {
    $.each(data, function(index) {
        alert(data[index].TEST1);
        alert(data[index].TEST2);
    });
});
 4
Author: Anurag Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 06:29:29

Oto, co wymyśliłem, aby łatwo wyświetlić wszystkie wartości danych:

var dataItems = "";
$.each(data, function (index, itemData) {
    dataItems += index + ": " + itemData + "\n";
});
console.log(dataItems);
 3
Author: Yovav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-02 04:18:33

$each zadziała.. Inną opcją jest jQuery Ajax Callback for array result

function displayResultForLog(result) 
{
       if (result.hasOwnProperty("d")) {
           result = result.d
       }

    if (result !== undefined && result != null )
    {
        if (result.hasOwnProperty('length')) 
        {
            if (result.length >= 1) 
            {
                for (i = 0; i < result.length; i++) {

                    var sentDate = result[i];

                }
            }
            else 
            {
                $(requiredTable).append('Length is 0');
            }
        }

        else 
        {
            $(requiredTable).append('Length is not available.');
        }

    }
    else 
    {
        $(requiredTable).append('Result is null.');
    }
  }
 0
Author: Lijo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:25

Jeśli nie chcesz alert, czyli u want html, to zrób to

...
    $.each(data, function(index) {
        $("#pr_result").append(data[index].dbcolumn);
    });
...

Uwaga: użyj "append", a nie "html", w przeciwnym razie ostatni wynik to to, co zobaczysz w widoku html

Wtedy twój kod html powinien wyglądać tak

...
<div id="pr_result"></div>
...

Możesz również stylować (dodawać klasę) div w jquery, zanim zostanie renderowany jako html

 0
Author: Adepoju-Conde Adesegun Chris.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-13 15:09:16