“Error : Cannot use ‘in’ operator to search for ‘length’ in [{“ID”:”2″,”Name”:”EAA2″}]” when performing $.each

What ever I do, I keep getting the same error. The only thing I have found that might of helped is the JSON.parse, but I still get the same problem. console log gives data as [{"ID":"2","Name":"EAA2"}]

I split it into two functions as I didn’t want to keep going back to the api everytime a user selects/de-selects an option.

I have also tried the following:

  1. Changing vars to lets
  2. Passing data.d from the update to the populate
function populateAvailableAuthorities() {
            var list = $('#availableAA');
            var data = JSON.parse($('#AAJSON').val());
            var auths = $('#tbSelectedAA').val();

            list.empty();
            
            $.each(data, function (key, entry) {
                if (!~auths.indexOf(entry.ID + ';')) {
                    list.append($('<option></option>').attr('value', entry.ID).text(entry.Name));
                }
            });
            
        }

        function updateListboxes() {
            var teams = '';
            let aa = $('#AAJSON');

            aa.empty();

            $('#cblTeams input:checked').each(function () {
                teams += $(this).attr('value') + ',';
            });

            if (teams.length > 1) {
                teams = teams.substr(0, teams.length - 1);

                $.ajax({
                    type: "POST",
                    url: '<%# ResolveUrl("~/api/Authorities.asmx/FetchByTeam") %>',
                    data: '{teams: "' + teams + '"}',
                    dataType: 'json',
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        aa.val(JSON.stringify(data.d));
                        populateAvailableAuthorities();
                    }
                });
            }
        }